从上一个问题开始: Pandas merge two dataframes with different columns
如果我将两个具有相同列的数据帧(A& B)连接在一起,但两列中都没有列,则在结果数据帧中,A和amp不共用的列的条目; B具有NaN值。有没有办法让这些条目有另一个默认值?
我不想简单地在concat操作后替换NaN,因为我想保留的原始数据帧中可能存在NaN值。
以下是两个示例数据框:
hello world how extra
1 2 3 g
5 -666 11 h
13 NaN i
23 7 29 j
extra you how
1.1 31
b -666 37
c 1.3 41
d NaN 43
-666 1.7 -666
例如,如果在不相交的列中使用的默认值是" W4L"而不是NaN,期望的结果将是:
hello world how extra you
1 2 3 g W4L
5 -666 11 h W4L
13 NaN i W4L
23 7 29 j W4L
W4L W4L 31 1.1
W4L W4L 37 b -666
W4L W4L 41 c 1.3
W4L W4L 43 d NaN
W4L W4L -666 -666 1.7
答案 0 :(得分:1)
一种可能的解决方案是在连接两个数据帧之前“符合”索引,并且在该步骤中可以定义fill_value:
common_columns = df1.columns.union(df2.columns)
df1 = df1.reindex(columns=common_columns, fill_value='W4L')
df2 = df2.reindex(columns=common_columns, fill_value='W4L')
pd.concat([df1, df2])
使用您的示例数据:
In [32]: common_columns = df1.columns.union(df2.columns)
In [34]: df1 = df1.reindex(columns=common_columns, fill_value='4WL')
In [35]: df1
Out[35]:
extra hello how world you
0 g 1 3 2 W4L
1 h 5 11 -666 W4L
2 i 13 NaN W4L
3 j 23 29 7 W4L
In [36]: df2 = df2.reindex(columns=common_columns, fill_value='W4L')
In [37]: pd.concat([df1, df2])
Out[37]:
extra hello how world you
0 g 1 3 2 W4L
1 h 5 11 -666 W4L
2 i 13 NaN W4L
3 j 23 29 7 W4L
0 W4L 31 W4L 1.1
1 b W4L 37 W4L -666
2 c W4L 41 W4L 1.3
3 d W4L 43 W4L NaN
4 -666 W4L -666 W4L 1.7
您可以看到保留原始NaN
。