当组合pandas数据帧(concat或append)时,我可以设置默认值吗?

时间:2015-04-28 20:49:08

标签: python pandas dataframe

从上一个问题开始: 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

1 个答案:

答案 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