评估包含多个 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 tuple
是 True
?现在几乎一整天我都被困在这个问题上,我无法继续我的模块的其余部分,因为其他一切都取决于这个条件来正确评估我的 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)
我有一些语句调用了我自己定义的函数:
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 tuple
是 True
?现在几乎一整天我都被困在这个问题上,我无法继续我的模块的其余部分,因为其他一切都取决于这个条件来正确评估我的 DataFrames 元组。我将非常感谢对此的任何帮助。
非常感谢。
不要使用 is
运算符来比较类型。来自 docs:
The operators
is
andis not
test for object identity:x is y
is true if and only ifx
andy
are the same object.
改为尝试使用 isinstance
:
isinstance(sim_extracted_dfs, tuple)