合并 list 中的 dataframe

Intro

需求很明确,有一个list,每个元素都是一个dataframe,其中dataframe的列数相同。希望把这些子数据框合并成大的数据框。这个list是多线程计算返回的结果,在R里可以直接用do.call函数,那么python中怎么用呢?先看版本信息:

系统:in10
Python:3.7.0(python --version)
Pandas:0.23.4
数据构造

import pandas as pd  
# sample dataframes
d1 = pd.DataFrame({'one' : [1., 2., 3., 4.], 'two' : [4., 3., 2., 1.]})
d2 = pd.DataFrame({'one' : [5., 6., 7., 8.], 'two' : [9., 10., 11., 12.]})
d3 = pd.DataFrame({'one' : [15., 16., 17., 18.], 'three' : [19., 10., 11., 12.]})

# list of dataframes
mydfs = [d1, d2, d3]
mydfs[0]
one	two
0	1.0	4.0
1	2.0	3.0
2	3.0	2.0
3	4.0	1.0
concat函数

这个函数其实很常用,只是不知道可以这样用。

pd.concat(mydfs)
D:\code\anaconda\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  """Entry point for launching an IPython kernel.
onethreetwo
01.0NaN4.0
12.0NaN3.0
23.0NaN2.0
34.0NaN1.0
05.0NaN9.0
16.0NaN10.
27.0NaN11.
38.0NaN12.
015.019.0NaN
116.010.0NaN
217.011.0NaN
318.012.0NaN

可以看到列名需要一致,不然会根据列名,做容错处理~

reduce函数
from functools import reduce
reduce(lambda df1, df2: df1.merge(df2, "outer"), mydfs)
onetwothree
01.04.0NaN
12.03.0NaN
23.02.0NaN
34.01.0NaN
45.09.0NaN
56.010.0NaN
67.011.0NaN
78.012.0NaN
815.0NaN19.0
916.0NaN10.0
1017.0NaN11.0
1118.0NaN12.0

这个reduce函数和scala里的reduce差不多哎~看来不同语言,在某些功能的实现上是共通的

Ref
[1] stackoverflow

2020-05-07 于南京市江宁区九龙湖
转载自:
https://blog.csdn.net/wendaomudong_l2d4/article/details/106191773

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值