簡體   English   中英

Python-合並數據框名稱包含在列表中

[英]Python - Merge dataframe name contains in list

我有2個數據框(現在我說2個,但我們可以有n個數據框)。 數據框的名稱在列表中。 我想加入名稱出現在列表中的所有數據框

import pandas as pd
data1 = [['Alex',10],['Bob',12],['Clarke',13]]
df1 = pd.DataFrame(data1,columns=['Name','Age'])

data2 = [['David',10],['Alain',12],['Rob',13]]
df2 = pd.DataFrame(data2,columns=['Name','Age'])

list = ['df1','df2']                   

# i want something to work like

df3 = pd.Concat(list)

感謝您的幫助。

您需要將名稱設置為索引,然后執行concat

list = [df1,df2] 

pd.concat([x.set_index('Name') for x in list],axis=1)
Out[270]: 
         Age   Age
Alain    NaN  12.0
Alex    10.0   NaN
Bob     12.0   NaN
Clarke  13.0   NaN
David    NaN  10.0
Rob      NaN  13.0

或使用reduce + merge

from functools import reduce
df = reduce(lambda  left,right: pd.merge(left,right,on=['Name'],
                                            how='outer'), list)
df
Out[275]: 
     Name  Age_x  Age_y
0    Alex   10.0    NaN
1     Bob   12.0    NaN
2  Clarke   13.0    NaN
3   David    NaN   10.0
4   Alain    NaN   12.0
5     Rob    NaN   13.0

如果要合並結果,請使用:

pd.concat([df1, df2], ignore_index=True)

#     Name  Age
#0    Alex   10
#1     Bob   12
#2  Clarke   13
#3   David   10
#4   Alain   12
#5     Rob   13

不要將變量名用作list 遍歷列表以獲取數據幀的實例,然后進行串聯

lis = ['df1','df2']                   

df3 = pd.concat([globals()[i] for i in lis]) # to get instance of df1 from string 'df1'
df3

產量

Name    Age
Alex    10
Bob     12
Clarke  13
David   10
Alain   12
Rob     13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM