python-3.x 连接多个panda Dataframe

piah890a  于 2022-12-27  发布在  Python
关注(0)|答案(2)|浏览(156)

我存储了2000个Pandas Dataframe ,每个 Dataframe 的大小为(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 看起来像:

##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

所以我想要实现的是,我想要在条目列的基础上连接这些 Dataframe 。如果给定的条目不存在于 Dataframe 中,例如条目2不存在于 Dataframe 3中,那么我想要在那里将值设置为0。我如何使用我拥有的2000个 Dataframe 来实现这一点?请提供见解。

umuewwlo

umuewwlo1#

您可以将pandas.concataxis=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文件的实际分隔符,这可能会有所不同

nuypyhwy

nuypyhwy2#

您可以使用pd.merge df3_merged = pd.merge[df1,df2]
甚至可以使用左连接或右连接。df3_merged = pd.merge[df1,df2,how = 'left']

相关问题