在多个数据帧中搜索类似的列名称

时间:2018-03-07 08:31:47

标签: python pandas dataframe

我有多个数据集具有相同的列名,如下例所示,我希望在多个数据集中重复的列使用python和pandas以列表格式排序。

df1 = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
               'B': 'one one two three two two one three'.split(),
               'C': np.arange(8), 
               'D': np.arange(8) * 2})
df2 = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
               'B': 'one one two three two two one three'.split(),
               'C': np.arange(8)})
df3 = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
               'B': 'one one two three two two one three'.split(),
               'D': np.arange(8) * 2})

从上面我们可以看到三个数据集df1,df2,df3重复列为'A','B',输出为['A','B'] 请解决这个问题。 在此先感谢

3 个答案:

答案 0 :(得分:0)

Pandas列的类型为pandas.core.indexes.base.Index,您可以使用其中的交集函数来查找重叠元素。以下是一个示例

import pandas as pd
import numpy as np

a = np.arange(1,4)
b = np.arange(5,8)
c = np.random.randint(0,10,size=3)
d = np.random.randint(0,10,size=3)
df_1 = pd.DataFrame({'a':a,'b':b,'c':c,'d':d})

out:

    a   b   c   d
0   1   5   5   1
1   2   6   7   5
2   3   7   6   9

a = np.arange(4,7)
b = np.arange(7,10)
e = np.random.randint(0,10,size=3)
f = np.random.randint(0,10,size=3)
df_2 = pd.DataFrame({'a':a,'b':b,'e':c,'f':d})
df_2

out:

    a   b   e   f
0   4   7   9   9
1   5   8   9   3
2   6   9   2   1

df_1.columns.intersection(df_2.columns)

out:

Index(['a', 'b'], dtype='object')

type(df_1.columns)

out:

pandas.core.indexes.base.Index

答案 1 :(得分:0)

熊猫可以get list of column names为你服务。例如,df1.columns将返回['A','B','C','D']。同样,您可以获取每个数据帧的列名列表。

然后你可以find out the intersection of all these lists

答案 2 :(得分:0)

我认为对于所有列名称的交集,最简单的是&

a = df1.columns & df2.columns & df3.columns
print (a)
Index(['A', 'B'], dtype='object')

如果需要list

a = (df1.columns & df2.columns & df3.columns).tolist()
print (a)
['A', 'B']