检查变量是否为dataframe

trb*_*bck 110 python pandas

当我的函数f用变量调用时我想检查var是否是pandas数据帧:

def f(var):
    if var == pd.DataFrame():
        print "do stuff"
Run Code Online (Sandbox Code Playgroud)

我想解决方案可能很简单,但即便如此

def f(var):
    if var.values != None:
        print "do stuff"
Run Code Online (Sandbox Code Playgroud)

我无法让它按预期工作.

Jak*_* M. 137

使用isinstance,别的:

if isinstance(x, pd.DataFrame):
    ... # do something
Run Code Online (Sandbox Code Playgroud)

PEP8明确表示这isinstance是检查类型的首选方法

No:  type(x) is pd.DataFrame
No:  type(x) == pd.DataFrame
Yes: isinstance(x, pd.DataFrame)
Run Code Online (Sandbox Code Playgroud)

甚至不要考虑

if obj.__class__.__name__ = 'DataFrame':
    expect_problems_some_day()
Run Code Online (Sandbox Code Playgroud)

isinstance处理继承(请参阅type()和isinstance()之间的区别是什么?).例如,它会告诉你,如果一个变量是一个字符串(strunicode),因为他们从派生basestring)

if isinstance(obj, basestring):
    i_am_string(obj)
Run Code Online (Sandbox Code Playgroud)

专门针对pandas DataFrame对象:

import pandas as pd
isinstance(var, pd.DataFrame)
Run Code Online (Sandbox Code Playgroud)


Rut*_*ies 127

使用内置isinstance()功能.

import pandas as pd

def f(var):
    if isinstance(var, pd.DataFrame):
        print("do stuff")
Run Code Online (Sandbox Code Playgroud)

  • 你怎么能把这个概括为用户可以使用你定义的函数的情况,但是没有'将pandas导入为pd`,而只是`import pandas`?只是在两种可能性上执行"或",还是有一些我不知道的更复杂的东西? (3认同)

小智 5

或者您可以使用最简单的解决方案:type(x)

如果是数据帧,它将输出pandas.core.frame.DataFrame