【发布时间】:2018-10-12 02:12:47
【问题描述】:
我有一个要合并到一个数据框的数据框列表。
列表中具有相同列名的数据框具有不同的索引,反之亦然。每个数据框有 1 行 80 列,列表的总长度为 8000 个数据框。
这是我的数据框列表的缩小示例:
import pandas as pd
u = pd.DataFrame(data=[[1, 2, '111']], columns = ['a', 'b', 'id'])
u = u.set_index('id')
v = pd.DataFrame(data=[[3, 4, '222']], columns = ['a', 'b', 'id'])
v = v.set_index('id')
w = pd.DataFrame(data=[[5, 6, '333']], columns = ['a', 'b', 'id'])
w = w.set_index('id')
x = pd.DataFrame(data=[[7, 8, '444']], columns = ['a', 'b', 'id'])
x = x.set_index('id')
y = pd.DataFrame(data=[[9, 10, '111']], columns = ['c', 'd', 'id'])
y = y.set_index('id')
z = pd.DataFrame(data=[[11, 12, '222']], columns = ['c', 'd', 'id'])
z = z.set_index('id')
list_df = [u, v, w, x, y, z]
如何创建一个如下所示的合并表:
id a b c d
--------------------------
111 1.0 2.0 9.0 10.0
222 3.0 4.0 11.0 12.0
333 5.0 6.0 NaN NaN
444 7.0 8.0 NaN NaN
目前,由于我列表的大小,我一直在使用pd.concat。但是,pd.concat(list_df, axis = 0) 给出:
id a b c d
--------------------------
111 1.0 2.0 NaN NaN
222 3.0 4.0 NaN NaN
333 5.0 6.0 NaN NaN
444 7.0 8.0 NaN NaN
111 NaN NaN 9.0 10.0
222 NaN NaN 11.0 12.0
而pd.concat(list_df, axis = 1) 给出:
id a b a b a b a b c d c d
----------------------------------------------------------------
111 1.0 2.0 NaN NaN NaN NaN NaN NaN 9.0 10.0 NaN NaN
222 NaN NaN 3.0 4.0 NaN NaN NaN NaN NaN NaN 11.0 12.0
333 NaN NaN NaN NaN 5.0 6.0 NaN NaN NaN NaN NaN NaN
444 NaN NaN NaN NaN NaN NaN 7.0 8.0 NaN NaN NaN NaN
【问题讨论】: