我想要合并多个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
答案 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