我有一些声明,我调用了一个我自己定义的函数:
sim_extracted_dfs = extract_dataframes(sim_queue_total_df_sim)
print (sim_extracted_dfs is tuple)
其中extract_dataframes()
是一个接受一个大型DataFrame作为参数的函数,并处理该DataFrame以返回一个由4个较小的DataFrame组成的元组,因为从它返回自身的元组可以看出这一点:
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
?我几乎整天都在这一个问题上陷入困境,我无法继续使用我的模块的其余部分,因为其他一切都依赖于这个条件来正确评估我的DataFrame元组。我真的很感激你的帮助。
非常感谢。
答案 0 :(得分:2)
请勿使用is
运算符来比较类型。来自docs:
运算符
is
和is not
测试对象标识:当且仅当x is y
和x
是同一个对象时,y
才为真。
相反,请尝试使用isinstance
:
isinstance(sim_extracted_dfs, tuple)