检查变量是否为数据框

244 投票
3 回答
288863 浏览
提问于 2025-04-17 15:28

当我调用我的函数 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)

特别是对于 pandasDataFrame 对象:

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

撰写回答