首页 > 解决方案 > 加入多个熊猫数据框

问题描述

我存储了 2000 个熊猫数据框。每个数据帧的大小为 ( 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 个数据框来实现这一目标?见解将不胜感激。

标签: python-3.xpandasnumpy-ndarray

解决方案


您可以将pandas.concat与按axis=1列连接的选项一起使用:

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

如果数据存储在磁盘上的文件中,假设它们被命名为 /tmp/dfXXX.csv,您可以使用glob模块和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 文件的实际分隔符


推荐阅读