Python 在计算包含多个数据帧的元组对象时,会出现极其令人费解的行为

Python 在计算包含多个数据帧的元组对象时,会出现极其令人费解的行为,python,if-statement,pandas,tuples,conditional-statements,Python,If Statement,Pandas,Tuples,Conditional Statements,我有一些语句调用我自己定义的函数: sim_extracted_dfs = extract_dataframes(sim_queue_total_df_sim) print (sim_extracted_dfs is tuple) 其中,extract\u dataframes()是一个函数,它接受一个大数据帧作为参数,并处理该数据帧以返回一个由4个较小数据帧组成的元组,因为从元组中可以明显看出,它返回到自身: return ( pd.concat(objs = df_list_first_p

我有一些语句调用我自己定义的函数:

sim_extracted_dfs = extract_dataframes(sim_queue_total_df_sim)
print (sim_extracted_dfs is tuple)
其中,
extract\u dataframes()
是一个函数,它接受一个大数据帧作为参数,并处理该数据帧以返回一个由4个较小数据帧组成的元组,因为从元组中可以明显看出,它返回到自身:

return ( pd.concat(objs = df_list_first_param, ignore_index = True),
       pd.concat(objs = df_list_second_param, ignore_index = True),
       pd.concat(objs = df_list_third_param, ignore_index = True),
       pd.concat(objs = df_list_fourth_param, ignore_index = True) )
由于
sim\u extracted\u dfs
是一个元组对象,因此稍后我将在一些
for
循环的代码中使用它,在这些循环中,我将迭代该元组的每个项(在本例中为数据帧)。然而,我在尝试这样做时遇到了一些问题,我才意识到,当我以非交互方式执行代码时,
sim\u extracted\u dfs
似乎并不被视为元组。使用以下调试语句:

print (sim_extracted_dfs is tuple)
print type(sim_extracted_dfs)
在执行
ipython data_analysis.py
时,我在终端中得到了这些非常令人困惑和矛盾的相应输出,其中data_analysis是模块的名称:

False
<type 'tuple'>
这真让我发疯。这是虫子还是什么?为什么现在
sim\u extracted\u dfs是tuple
True
?我几乎一整天都在解决这个问题,我无法继续我模块的其余部分,因为其他一切都依赖于这个条件来正确评估我的数据帧元组。我真的很感激在这方面的任何帮助


非常感谢。

不要使用
is
运算符来比较类型。从:

运算符
不为
测试对象标识:
x为y
当且仅当
x
y
为同一对象时为真

相反,请尝试使用:


请考虑使用<代码> IS实例(SimuleExpDeDFS,元组)< /代码>谢谢您的帮助。现在就可以了。但是,你知道为什么
的行为是这样的吗?虽然我用错了,但我想知道为什么它会如此严重地崩溃…@AKKO
x是tuple
测试对象x是否是类对象tuple-ie,如果你做了
x=tuple
(或类似的事情)。它不测试x是否是元组。嗯,当我这样做时它不起作用,因为
sim\u extracted\u dfs
实际上是元组类的一个实例,是这样吗?但是为什么我从这个测试中得到了这个语句的非交互执行和交互执行之间矛盾的结果呢?@AKKO我认为
x是y
本质上与。我不知道你为什么会得到这些结果。也许IPython(或您的代码)将
元组
改写为其他内容?@grc打败了我。我没有任何语句覆盖数据类型,因此我无法理解为什么会出现两种不同的行为。这就是为什么我说这整件事快把我逼疯了。。。
In [108]: type(data_analysis.sim_extracted_dfs)
Out[108]: tuple

In [109]: data_analysis.sim_extracted_dfs is tuple
Out[109]: True

In [110]: print (data_analysis.sim_extracted_dfs is tuple)
True

In [111]: print data_analysis.sim_extracted_dfs is tuple
True

In [112]: 
isinstance(sim_extracted_dfs, tuple)