使用 pandas 合并和附加多个 CSV/数据帧的最快方法

Posted

技术标签:

【中文标题】使用 pandas 合并和附加多个 CSV/数据帧的最快方法【英文标题】:Fastest way to merge and append multiple CSVs / data frames using pandas 【发布时间】:2021-03-22 14:56:05 【问题描述】:

我有以下数据框/CSV:

df1=
Person apple ball
A      3     4   
B      5     1

df2=
Person apple cat
A      3     6  
B      5     2  

df3=
Person apple cat
C      6     2   
D      2     2

df4=
Person dog  cat 
C      1    2    
D      1    2   

我有兴趣了解合并和附加此类数据帧的最快方法 '人'。预期的输出如下所示:

output=
Person apple ball  cat  dog
A      3     4     6    nan
B      5     1     2    nan
C      6     nan   2    1
D      2     nan   2    1

【问题讨论】:

检查this link 【参考方案1】:

如果同一列和索引的值在所有DataFrames 中都相同,则可以使用:

这意味着例如对于index=Acolumn=apple 是每个 Dataframe 相同的值 - 这里是 3(如果存在)

dfs = [df1, df2, df3, df4]
#if Person is column, not index
dfs = [x.set_index('Person') for x in dfs]

df = pd.concat(dfs).groupby(level=0).first()
print (df)
       apple  ball  cat  dog
Person                       
A        3.0   4.0  6.0  NaN
B        5.0   1.0  2.0  NaN
C        6.0   NaN  2.0  1.0
D        2.0   NaN  2.0  1.0

【讨论】:

【参考方案2】:

看看这是否适合你的用例,合并在列和索引标签上,最后连接结果:

first = df1.merge(df2, on=["index", "apple"])
second = df3.merge(df4, on=["index", "cat"])
pd.concat([first, second])

       apple    ball  cat  dog
index               
   A    3       4      6    3
   B    5       1      2    8
   C    6       8      2    1
   D    2       3      2    1

【讨论】:

以上是关于使用 pandas 合并和附加多个 CSV/数据帧的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pandas 将新的数据帧行附加到 csv?

Pandas:使用循环和分层索引将多个 csv 文件导入数据帧

当我合并两个 Pandas 数据帧时出现 MemoryError

使用 pandas 或 numpy 从一个 csv 加载多个数据帧

如何在 Python 中使用 Pandas 数据结构附加多个 CSV 文件

如何使用 Python Pandas 合并多个 CSV 文件