如何连接一个数据帧字典(每个数据帧的索引以0开头)?因此,存在不同列大小的重复索引。也就是说,一些df有一些缺失的列,而一些df包含所有的列。
下面是一个例子:
df1
idx col1 col2 col3
0 1 1 1
1 2 2 2
df2
idx col1 col3
0 1 1
1 2 2
df3
idx col1 col2 col3
0 1 1 1
1 2 2 2
desired_result
idx col1 col2 col3
0 1 1 1
1 2 2 2
2 1 nan 1
3 2 nan 2
4 1 1 1
5 2 2 2
所以我想用nan填充这些列,并将其重塑为包含所有列的数据框架。
提前感谢!
考虑到数据帧的字典如下所示
df_dict = {
'df1': pd.DataFrame({'idx': [1, 2], 'col1': [1, 2], 'col2': [1, 2], 'col3': [1, 2]}),
'df2': pd.DataFrame({'idx': [1, 2], 'col1': [1, 2], 'col3': [1, 2]}),
'df3': pd.DataFrame({'idx': [1, 2], 'col1': [1, 2], 'col2': [1, 2], 'col3': [1, 2]})
}
可以简单地使用pandas.concat
如下
df = pd.concat(df_dict.values(), ignore_index=True)
[Out]:
idx col1 col2 col3
0 1 1 1.0 1
1 2 2 2.0 2
2 1 1 NaN 1
3 2 2 NaN 2
4 1 1 1.0 1
5 2 2 2.0 2
如果想将idx
列作为索引,可以按如下方式传递pandas.DataFrame.set_index
df = pd.concat(df_dict.values(), ignore_index=True).set_index('idx')
[Out]:
col1 col2 col3
idx
1 1 1.0 1
2 2 2.0 2
1 1 NaN 1
2 2 NaN 2
1 1 1.0 1
2 2 2.0 2
指出:
如果不希望
col2
为float64
(遵循此用户的评论),一种方法是使用pandas.Int64Dtype
,如下所示df['col2'] = df['col2'].astype(pd.Int64Dtype()) [Out]: idx col1 col2 col3 0 1 1 1 1 1 2 2 2 2 2 1 1 <NA> 1 3 2 2 <NA> 2 4 1 1 1 1 5 2 2 2 2