使用IF语句循环数据帧列表



只是在数据帧列表上运行一个简单的for循环,但试图添加一个IF子句。。。而且它一直在出错。

df_list = [df1, df2, df3]
for df in df_list:
if df in [df1, df2]:
x = 1
else:
x = 2
.
.
.
ValueError: Can only compare identically-labeled DataFrame objects

以上是我尝试的一个简化版本。有人能告诉我为什么这不起作用吗?

您可以将DataFrame.equalsany一起使用:

df_list = [df1, df2, df3]
for df in df_list:
if any(df.equals(y) for y in [df1, df2]):
x = 1
else:
x = 2

此处不要使用.equals()

这是不必要的,而且会减慢编程速度,请使用id()

df_list = [df1, df2, df3]
for df in df_list:
if id(df) in [id(df1), id(df2)]: 
x = 1
else:
x = 2

因为在这里你只需要比较身份,而不是价值观。

您可以使用更好的容器并通过标签引用它们。

具有对象类型的大型DataFrames的相等性检查可能会变得缓慢,>gt;秒,但检查标签是否在列表中需要~ns。

dfs = {'df1': df1, 'df2': df2, 'df3': df3}
for label, df in dfs.items():
if label in ['df1', 'df2']:
x = 1
else:
x = 2

您需要使用df.equals((

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.equals.html

df_list = [df1, df2, df3]
for df in df_list:
if df.equals(df1) or df.equals(df2):
# blah blah

以下链接可能会有所帮助:Pandas";只能比较相同标记的DataFrame对象";错误

据此,与==进行比较的数据帧应该具有相同的列和索引,否则会出现错误。

或者,可以使用dataframe.equals方法比较数据帧。请参阅以下文档:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.equals.html

最新更新