当我的函数 f 用变量调用时,我想检查 var 是否是 pandas 数据框:
def f(var): if var == pd.DataFrame(): print "do stuff"
我想解决方案可能很简单,但即使
def f(var): if var.values != None: print "do stuff"
我无法让它像预期的那样工作。
使用isinstance,仅此而已:
isinstance
if isinstance(x, pd.DataFrame): ... # do something
PEP8明确表示这isinstance是检查类型的首选方法
No: type(x) is pd.DataFrame No: type(x) == pd.DataFrame Yes: isinstance(x, pd.DataFrame)
甚至不去想
if obj.__class__.__name__ = 'DataFrame': expect_problems_some_day()
isinstance处理继承(请参阅Type() 和 isinstance() 之间的区别是什么?)。例如,它会告诉您变量是否为字符串(str或unicode),因为它们派生自basestring)
str
unicode
basestring
if isinstance(obj, basestring): i_am_string(obj)
专门针对pandas DataFrame对象:
pandas
DataFrame
import pandas as pd isinstance(var, pd.DataFrame)