在填充空字符串时合并未对齐的 DataFrame
Merge unaligned DataFrames while filling with empty string
我有多个要合并的 DataFrame,我希望填充值为空字符串而不是 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
使用concat
后,您可以迭代合并的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
好吧,我在 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
我有多个要合并的 DataFrame,我希望填充值为空字符串而不是 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
使用concat
后,您可以迭代合并的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
好吧,我在 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