检查变量是否为数据框
当我调用我的函数 f,并传入一个变量时,我想检查这个变量是否是一个 pandas 数据框:
def f(var):
if var == pd.DataFrame():
print "do stuff"
我觉得解决这个问题可能很简单,但即使使用了
def f(var):
if var.values != None:
print "do stuff"
我还是无法让它像我预期的那样工作。
3 个回答
5
或者你可以使用最简单的方法:type(x)
。
如果它是一个数据框(Data Frame),那么输出会是 pandas.core.frame.DataFrame
。
157
使用内置的 isinstance()
函数。
import pandas as pd
def f(var):
if isinstance(var, pd.DataFrame):
print("do stuff")
361
使用 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
继承来的)
if isinstance(obj, basestring):
i_am_string(obj)
特别是对于 pandas
的 DataFrame
对象:
import pandas as pd
isinstance(var, pd.DataFrame)