评估包含多个 DataFrame 的元组对象时的极其令人费解的行为

Extremely puzzling behavior when evaluating a tuple object that holds multiple DataFrames

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

sim_extracted_dfs = extract_dataframes(sim_queue_total_df_sim)
print (sim_extracted_dfs is tuple)

其中 extract_dataframes() 是一个函数,它接受一个大的 DataFrame 作为参数并将该 DataFrame 处理为 return 我一个由 4 个较小的 DataFrame 组成的元组,因为从元组中可以明显看出它returns 自身:

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_extracted_dfs 是一个元组对象,我稍后将在我的代码中的一些 for 循环中使用它,我将迭代其中的每个项目(在本例中为 DataFrame)元组。然而,我 运行 在尝试这样做时遇到了一些问题,我刚刚意识到,当我以非交互方式执行我的代码时, sim_extracted_dfs 似乎不被视为元组。使用以下调试语句:

print (sim_extracted_dfs is tuple)
print type(sim_extracted_dfs)

我在执行 ipython data_analysis.py 时在终端中得到了这些非常令人费解和矛盾的相应输出,其中 data_analysis 是模块的名称:

False
<type 'tuple'>

我更进一步启动了 IPython 并导入了我的模块(我的模块的名称是 data_analysis),这样我就可以进行交互式调试,这就是我得到的:

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]: 

这真让我抓狂。这是错误还是什么?为什么现在 sim_extracted_dfs is tupleTrue?现在几乎一整天我都被困在这个问题上,我无法继续我的模块的其余部分,因为其他一切都取决于这个条件来正确评估我的 DataFrames 元组。我将非常感谢对此的任何帮助。

非常感谢。

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

The operators is and is not test for object identity: x is y is true if and only if x and y are the same object.

改为尝试使用 isinstance:

isinstance(sim_extracted_dfs, tuple)