değişkenin veri çerçevesi olup olmadığını kontrol edin


131

f fonksiyonum bir değişkenle çağrıldığında, var'ın bir pandas veri çerçevesi olup olmadığını kontrol etmek istiyorum:

def f(var):
    if var == pd.DataFrame():
        print "do stuff"

Sanırım çözüm oldukça basit olabilir, ancak

def f(var):
    if var.values != None:
        print "do stuff"

Beklendiği gibi çalışmasını sağlayamıyorum.


1
Kodunuz "if var, boş bir veri çerçevesine eşittir " diyor . Gerçekten istediğiniz şey, "türünün türüne vareşit olması pd.DataFrame". Bunu kullanarak kontrol edebilirsinizisinstance
Katriel

Yanıtlar:


182

Kullan isinstance, başka bir şey yok:

if isinstance(x, pd.DataFrame):
    ... # do something

PEP8 , isinstancetürleri kontrol etmenin tercih edilen yolu olduğunu açıkça söylüyor

No:  type(x) is pd.DataFrame
No:  type(x) == pd.DataFrame
Yes: isinstance(x, pd.DataFrame)

Ve aklından bile geçirme

if obj.__class__.__name__ = 'DataFrame':
    expect_problems_some_day()

isinstancemirası işler (bkz. type () ve isinstance () arasındaki farklar nelerdir? ). Örneğin, bir değişkenin bir dizge olup olmadığını (ya strda unicode), çünkü türetildikleri için size söyleyecektir basestring)

if isinstance(obj, basestring):
    i_am_string(obj)

Özellikle pandas DataFramenesneler için:

import pandas as pd
isinstance(var, pd.DataFrame)

131

Yerleşik isinstance()işlevi kullanın .

import pandas as pd

def f(var):
    if isinstance(var, pd.DataFrame):
        print("do stuff")

3
Bunu, bir kullanıcının sizin tanımladığınız ama kullanmadığınız işlevi kullanabileceği, import pandas as pdbunun yerine sadece kullanabileceği duruma nasıl genelleyebilirsiniz import pandas? Sadece orher iki olasılık için de bir performans sergileyin , yoksa bilmediğim daha karmaşık bir şey mi var?
n1k31t4

1
Olası bir çözüm, import ifadesini işlevin içine koymak olabilir, böylece bir kullanıcının başka bir yöntemi kullanarak pandaları içe aktarma şansı kalmaz. İşleri hızlandırmak için (basit bir kontrol için tüm panda kitaplığını içe aktarmaktan kaçınmak için) gibi bir şey kullanabilir import pandas.DataFrame as panda_typeve sonra içerideisinstance(var, panda_type)
pacificgilly1992
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.