2017-10-14 78 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