加入多个 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.concat 和 axis=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']
我存储了 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.concat 和 axis=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']