填充空字符串时合并未对齐的DataFrame

时间:2016-04-04 21:58:08

标签: python pandas merge alignment concat

我想要合并多个DataFrames,我希望填充值为空字符串而不是nan。一些DataFrame中已经有了nan值。 concat排序做我想要的,但用nan填充空值。如何不用nan填充它们,或者指定fill_value来实现类似的东西:

>>> df1
    Value1
0       1
1     NaN
2       3

>>> df2
    Value2
1       5
2       Nan
3       7

>>> merge_multiple_without_nan([df1,df2])
    Value1    Value2
0       1     
1     NaN       5
2       3       NaN
3               7

这就是concat所做的:

>>> concat([df1,df2], axis=1)
   Value1  Value2
0       1     NaN
1     NaN       5
2       3     NaN
3     NaN       7

2 个答案:

答案 0 :(得分:0)

使用concat后,您可以迭代合并的DataFrame,找到缺失的索引,并用空字符串填充它们。只要您的列名称是唯一的,这应该可用于连接任意数量的DataFrame。

# Concatenate all of the DataFrames.
merge_dfs = [df1, df2]
full_df = pd.concat(merge_dfs, axis=1)

# Find missing indices for each merged frame, fill with an empty string.
for partial_df in merge_dfs:
    missing_idx = full_df.index.difference(partial_df.index)
    full_df.loc[missing_idx, partial_df.columns] = ''

使用您的样本数据得到的输出:

  Value1 Value2
0      1       
1    NaN      5
2      3    NaN
3             7

答案 1 :(得分:0)

好吧,我在concat或merge中找不到任何能够自行处理的函数,但是下面的代码没有太多的麻烦:

df1 = pd.DataFrame({'Value2': [1,np.nan,3]}, index = [0,1, 2])
df2 = pd.DataFrame({'Value2': [5,np.nan,7]}, index = [1, 2, 3])
# Add temporary Nan values for the data frames.
df = pd.concat([df1.fillna('X'), df2.fillna('Y')], axis=1)
df=
  Value2 Value2
0      1    NaN
1      X      5
2      3      Y
3    NaN      7

第2步:

df.fillna('', inplace=True)
df=
  Value2 Value2
0      1
1      X      5
2      3      Y
3             7  

第3步:

df.replace(to_replace=['X','Y'], value=np.nan, inplace=True)
df=
  Value2 Value2
0      1
1    NaN      5
2      3    NaN
3             7