FAB*_*eng 6 python merge dataframe pandas
我想结合两个dataframes。dataframe假设其中一个Empty_DF是空的,并且大小很大(320列乘240行),索引和列名只是整数。另一个ROI_DF较小,并且填充,并且在特定位置匹配索引和列名。
我已尝试使用pandas.merge此问题中建议的功能;但是,它将只是将列追加到空dataframe Empty_DF而不替换值。
Empty_DF = pd.DataFrame({'a':[0,0,0,0,0,0],
'b':[0,0,0,0,0,0], 'b':[0,0,0,0,0,0]}, index=list('abcdef'))
print (Empty_DF)
ROI_DF= pd.DataFrame({'a':range(4),
'b':[5,6,7,8]}, index=list('abce'))
print(ROI_DF)
a b c
a 0 0 0
b 0 0 0
c 0 0 0
d 0 0 0
e 0 0 0
f 0 0 0
Run Code Online (Sandbox Code Playgroud)
在此示例中,这足够了,因为dataframe很小,pandas.fillna可以使用带有pandas.drop 的选项。有没有更有效的方法来将此优化为更大dataframes?
df3 = pd.merge(Empty_DF, ROI_DF, how='left', left_index=True,
right_index=True, suffixes=('_x', ''))
df3['a'].fillna(df3['a_x'], inplace=True)
df3['b'].fillna(df3['b_x'], inplace=True)
df3.drop(['a_x', 'b_x'], axis=1, inplace=True)
print(df3)
a b c
a 0 5 0
b 1 6 0
c 2 7 0
d 0 0 0
e 3 8 0
f 0 0 0
Run Code Online (Sandbox Code Playgroud)
这是 的完美案例DataFrame.update,它与索引对齐
Empty_DF.update(ROI_DF)
Run Code Online (Sandbox Code Playgroud)
输出
print(df3)
a b c
a 0.0 5.0 0
b 1.0 6.0 0
c 2.0 7.0 0
d 0.0 0.0 0
e 3.0 8.0 0
f 0.0 0.0 0
Run Code Online (Sandbox Code Playgroud)
请注意update,正如文档中引用的那样,它已经到位:
使用另一个 DataFrame 中的非 NA 值进行适当修改。
这意味着您的原始数据框将被新值更新。为了防止这种情况,请使用:
df3 = Empty_DF.copy()
df3.update(ROI_DF)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |