我有几个df,想确定它们是否都具有相同的列名。我已经看到了几个使用两个数据帧完成此操作的示例,但需要一些有关如何在多个df-s上执行此操作的信息。
例如,如果我有df-s列表
dataframes = [df_1, df_2, df_3, df_4, df_5_1, df_5_2, df_6_1, df_6_2]
我想遍历每一个,看看它们是否都包含相同的列名。
答案 0 :(得分:1)
假设您没有重复的列名(在pandas
中从来都不是一个好主意,并且“相同”不在乎它们在索引中的位置,则足以检查长度)列索引的长度与两个DataFrame索引之间设置的交集的长度相同。
由于您想知道它们是否全部相同或任何不同,因此只需对照第一个即可。
all([len(dataframes[0].columns.intersection(df.columns))
== dataframes[0].shape[1] for df in dataframes])
答案 1 :(得分:0)
您可以使用以下方法检查data
:
columns = list(map(lambda x: list(x.columns), [df, df, df]))
data = pd.DataFrame(columns)
data = data.fillna("")
data.drop_duplicates(keep="first", inplace=True)
if len(data) > 1:
print("DIFFERENT COLUMNS")
,如果您在data
中找到索引,则该索引大于1行,它将显示columns
中的哪个数据帧
答案 2 :(得分:0)
只需比较列集:
if all([set(dataframes[0].columns) == set(df.columns) for df in dataframes]):
print('All have the same columns')
else:
print('Some have different columns')
ALollz的简洁答案的一种稍微简单的变体(即使他更快,我也不会感到惊讶)。