检查变量是否为数据框


129

当我的函数f用一个变量调用时,我想检查var是否是一个熊猫数据框:

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

我想解决方案可能很简单,但即使

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

我无法使其按预期方式工作。


1
您的代码显示“如果var等于空数据框”。您真正想要的是“如果类型var等于类型pd.DataFrame”。您可以使用isinstance
Katriel

Answers:


179

使用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()之间的区别?)。例如,它会告诉你,如果一个变量是一个字符串(strunicode),因为他们从派生basestring

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

专门针对pandas DataFrame对象:

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

131

使用内置isinstance()功能。

import pandas as pd

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

3
您如何将其概括为用户可以使用您定义的功能但没有使用import pandas as pd而只是使用的功能import pandas呢?只是or在两种可能性上都执行一个,还是有我不知道的更复杂的东西?
n1k31t4

1
可能的解决方案是将import语句放在函数内,以便用户没有机会使用其他方法导入熊猫。为了加快处理速度(避免为了简单检查而导入整个熊猫库),您可以使用类似命令import pandas.DataFrame as panda_type,然后在内部使用isinstance(var, panda_type)
pacificgilly1992 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.