加入多个 pandas 数据框

joining multiple pandas dataframe

我存储了 2000 pandas 个数据帧。每个数据帧的大小为 (X,2) 其中 X 可以是任何大于 100 的正整数。例如:

##Dataframe 1

entry.          feature
entry1            716
entry2            373
entry3            837 

##Dataframe 2

entry.          feature
entry1            173
entry2             0
entry4            981
entry5            717

##Dataframe 2

entry.          feature
entry1            716
entry5            736

我希望最终数据框看起来像:

##Dataframe 1

entry.          Dataframe1.        DataFrame2         Dataframe3
entry1            716                 173                716
entry2            373                  0                  0
entry3            837                  0                  0
entry4             0                  981                 0
entry5             0                  717                736

所以我想要实现的是,我想在条目列的基础上加入这些数据框。如果给定的条目不存在于数据帧中,例如条目 2 不存在于数据帧 3 中,那么我想在那里将值设置为 0。我怎样才能用我拥有的 2000 个数据帧实现这一目标?将不胜感激。

您可以使用 pandas.concataxis=1 选项按列连接:

pd.concat([df1, df2, df3], axis=1)

如果数据存储在磁盘上的文件中,假设它们被命名为 /tmp/dfXXX.csv,您使用 glob module combined with pandas.read_csv:

from glob import glob

files = glob('/tmp/df*.csv') 
df = pd.concat({f: pd.read_csv(f, sep='\s+', index_col=0)['feature']
                for f in files}, axis=1).fillna(0).astype(int)

输出:

        /tmp/df1.csv  /tmp/df2.csv  /tmp/df3.csv
entry1           716           173           716
entry2           373             0             0
entry3           837             0             0
entry4             0           981             0
entry5             0           717           736

注意。我在这里使用 '\s+' 作为分隔符,但这可能会有所不同,具体取决于 csv 文件的实际分隔符

您可以使用 pd.merge df3_merged = pd.merge[df1, df2]

即使您可以使用左连接或右连接。 df3_merged = pd.merge[df1, df2, 如何='left']