【问题标题】:check if variable is dataframe检查变量是否是数据框
【发布时间】:2013-01-26 08:47:07
【问题描述】:

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

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

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

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

我无法让它按预期工作。

【问题讨论】:

  • 您的代码显示“如果var 等于一个空数据帧”。你真正想要的是“如果var 的类型等于pd.DataFrame 的类型”。您可以使用isinstance 进行检查

标签: python pandas


【解决方案1】:

使用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 处理继承(参见What are the differences between type() and isinstance()?)。例如,它会告诉您变量是否为字符串(strunicode),因为它们派生自 basestring

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

专门针对pandas DataFrame 对象:

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

【讨论】:

    【解决方案2】:

    使用内置的isinstance()函数。

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

    【讨论】:

    • 您如何将其推广到用户可能使用您定义的功能但没有import pandas as pd,而只是import pandas 的情况?只需对两种可能性都执行or,还是有一些我不知道的更复杂的东西?
    • 一个潜在的解决方案可能是将 import 语句放在函数中,这样用户就没有机会使用其他方法导入 pandas。为了加快速度(避免导入整个熊猫库进行简单检查),您可以使用import pandas.DataFrame as panda_type 之类的东西,然后在里面使用isinstance(var, panda_type)检查数组类型
    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2021-11-08
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多