Python 检查数据帧是否已传递给函数

Python 检查数据帧是否已传递给函数,python,pandas,python-typing,Python,Pandas,Python Typing,我有一个定义如下的函数: def demand_cleaning(df=None, location, output,_input,tables): 我想测试df是否通过了,df是否是一个数据帧 如果df没有通过,我想做如下事情 if df is None: df = pd.read_pickle(tables + "Demand Raw") 但这项测试现在不起作用。我明白了 ValueError: The truth value of a DataFrame is ambiguou

我有一个定义如下的函数:

def demand_cleaning(df=None, location, output,_input,tables):
我想测试df是否通过了,df是否是一个数据帧

如果df没有通过,我想做如下事情

if df is None:
    df = pd.read_pickle(tables + "Demand Raw")
但这项测试现在不起作用。我明白了

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
你可以说:

if df is None:
如果要检查数据帧是否包含数据检查:

if not df.empty:
你可以说:

if df is None:
如果要检查数据帧是否包含数据检查:

if not df.empty:

尝试直接执行类型检查:

if isinstance(df, pandas.DataFrame):
    pass
请记住,isinstance的第二个参数取决于您导入的名称空间。这通常是pd,这将产生pd.DataFrame。
查看。

尝试直接执行类型检查:

if isinstance(df, pandas.DataFrame):
    pass
请记住,isinstance的第二个参数取决于您导入的名称空间。这通常是pd,这将产生pd.DataFrame。
看看。

像这样的东西可以:

def g(var):
    if isinstance(var, pd.DataFrame):
        print("good to go")
    else:
        print("Nah!")
        print(type(var))

a = None 

b = pd.DataFrame()

print(g(a))

"""
output>>> 

Nah!
<type 'NoneType'>
"""

print(g(b))

"""
output>>> 

good to go
"""

这样做可以:

def g(var):
    if isinstance(var, pd.DataFrame):
        print("good to go")
    else:
        print("Nah!")
        print(type(var))

a = None 

b = pd.DataFrame()

print(g(a))

"""
output>>> 

Nah!
<type 'NoneType'>
"""

print(g(b))

"""
output>>> 

good to go
"""


我感觉ValueError不是来自您向我们展示的内容。您知道在更改文件后,您需要在运行之前保存它吗?@GiantsLoveDeathMetal boolpd.DataFrame==无会引发完全相同的ValueError。OP应将其测试更改为df为None。df==None将所有df值与None进行比较,返回布尔值的数据帧。if然后询问bool,但是数据帧的真值是模糊的。我认为他总是传递一个数据帧,所以他需要做的是检查df.empty:@GiantsLoveDeathMetal是否为函数的可选参数,它可以是None。我确实觉得奇怪的是,这个函数签名没有给出语法错误:非默认参数跟在默认参数后面。我感觉ValueError不是来自您向我们展示的内容。您知道在更改文件之后,运行前需要保存吗?@GiantsLoveDeathMetal boolpd.DataFrame==None将引发完全相同的值错误。OP应将其测试更改为df为None。df==None将所有df值与None进行比较,返回布尔值的数据帧。if然后询问bool,但是数据帧的真值是模糊的。我认为他总是传递一个数据帧,所以他需要做的是检查df.empty:@GiantsLoveDeathMetal是否为函数的可选参数,它可以是None。我确实觉得奇怪的是,这个函数签名没有给出一个SyntaxError:如果df为None,则非默认参数跟在默认参数后面。如果我尝试,则df为None:但传递一个数据帧,我会得到以下消息ValueError:数据帧的真值不明确。使用a.empty、a.bool、a.item、a.any或a.all。@Nicolas使用is代替==…@Nicolas你不可能得到该值。你忘了按Ctrl+s键并保存代码。如果我尝试如果df为None:但传递一个数据帧,我会得到以下消息ValueError:数据帧的真值不明确。使用a.empty、a.bool、a.item、a.any或a.all。@Nicolas使用is代替==…@Nicolas你不可能得到该值Error你忘了按Ctrl+s键并保存代码。如果~isinstancedf,pd.DataFrame:但get ValueError:DataFrame的真值不明确,我会这样做。使用a.empty、a.bool、a.item、a.any或a.all。是的,你没有帮助处理这个重复的错误消息,请向我们显示完整的回溯-请参阅@Jon Clements♦ 注释这就是我得到的结果~isinstanced,pd.DataFrame Out[62]:-2我想这在if中是不可能的。为什么~不返回false?如果~isinstancedf,pd.DataFrame:但得到值错误:DataFrame的真值不明确,我会尝试此方法。使用a.empty、a.bool、a.item、a.any或a.all。是的,你没有帮助处理这个重复的错误消息,请向我们显示完整的回溯-请参阅@Jon Clements♦ 注释这就是我得到的结果~isinstanced,pd.DataFrame Out[62]:-2我想这在if中是不可能的。为什么~不回馈虚假?