Python 确定多个数据帧中是否有相同的列名

Python 确定多个数据帧中是否有相同的列名,python,pandas,Python,Pandas,我有几个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] 我可能会遍历每一个,看看它们是否都包含相同的列名。您可以使用以下方法检查数据: columns = list(map(lambda x: list(x.columns), [df, df, d

我有几个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]

我可能会遍历每一个,看看它们是否都包含相同的列名。

您可以使用以下方法检查
数据:

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")

而您将在
数据中找到的索引
如果超过1行,它将显示
列中的哪个数据框
,前提是您没有重复的列名,这在
熊猫
中从来都不是一个好主意,并且“相同”不关心它们在索引中的位置,检查columns索引的长度是否与两个DataFrame索引之间的集合交集的长度相同就足够了

因为您想知道它们是所有的相同,还是任何一个不同,只需对照第一个进行检查就足够了

all([len(dataframes[0].columns.intersection(df.columns)) 
      == dataframes[0].shape[1] for df in dataframes])
只需比较列集合:


“简洁的答案(如果他的答案更快,我也不会感到惊讶)”的一个稍微简单的变体。“我可能会循环每个答案,看看它们是否都包含相同的列名。”
如果不是呢?你能发布预期的输出吗?你可以通过
df.columns
得到一个数据帧的列名列表,然后这只是一个列表比较的问题。我在想
pd.dataframe([dfs中i.columns代表i])。nunique(1.eq(1)。all()
@anky_91这是一个有效的解决方案(我认为对于
nunique
,可能不沿着axis=1)。尽管这取决于“相同的列”是否也需要排序。如果是这样,那么我的就不正确了,这是最好的(或者是简单的元素平等性检查)。无论是哪种方式,排序都可以使它变得很好,如果不考虑或按顺序排序的话。
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')