2017-10-14 77 views
0

我有两个熊猫数据框。第一列有21列,第二列有265列。我想要保留第二个数据框的子集,只保留第一个数据框中存在的列。我试图在DF1列的名称指定给一个列表然后分配列表子集DF2如下:子集熊猫数据框只保留列名出现在列表中

cols = df1.columns.tolist() 
df2[[cols]] 

当我这样做,我得到一个错误说:类型错误:unhashable类型:“名单”。

任何人都知道我可以如何执行此任务而不会出现此错误?

+1

只要'df2 [cols]'会做 – Zero

回答

0

如果从df1所有列在df2使用子集:

df3 = df2[df1.columns] 

样品:

df1 = pd.DataFrame({'A':list('abcdef'), 
        'B':[4,5,4,5,5,4], 
        'D':[7,8,9,4,2,3]}) 


df2 = pd.DataFrame({'A':list('erthju'), 
        'B':[40,50,40,50,50,40], 
        'C':[7,8,9,4,2,3], 
        'D':[1,3,5,7,1,0], 
        'E':[5,3,6,9,2,4], 
        'F':list('aaabbb')}) 


df3 = df2[df1.columns] 
print (df3) 
    A B D 
0 e 40 1 
1 r 50 3 
2 t 40 5 
3 h 50 7 
4 j 50 1 
5 u 40 0 

如果有可能不同的列:

df3 = df2[df1.columns.intersection(df2.columns)] 

样品:

df1 = pd.DataFrame({'A':list('abcdef'), 
        'B':[4,5,4,5,5,4], 
        'G':[7,8,9,4,2,3]}) 


df2 = pd.DataFrame({'A':list('erthju'), 
        'B':[40,50,40,50,50,40], 
        'C':[7,8,9,4,2,3], 
        'D':[1,3,5,7,1,0], 
        'E':[5,3,6,9,2,4], 
        'F':list('aaabbb')}) 


df3 = df2[df1.columns.intersection(df2.columns)] 
print (df3) 
    A B 
0 e 40 
1 r 50 
2 t 40 
3 h 50 
4 j 50 
5 u 40