【发布时间】:2019-08-29 23:54:37
【问题描述】:
我想在 Python 中组合两个不同大小的数据框。这些数据框是从 Excel 文件中加载的。第一个数据帧有许多包含 NaN 的空值,第二个数据帧有数据来替换第一个数据帧中的 NaN 值。这两个数据框由第一列中的数据链接,但顺序不同。
我可以使用 merge() 成功合并和组织数据帧,但生成的数据帧有额外的列,因为 NaN 值没有被覆盖。我可以用 fillna() 覆盖 NaN 值,但生成的数据帧是乱序的。有没有办法执行这种替换 NaN 的合并,而不需要单独的删除和重新排序列的操作?
import pandas as pd
import numpy as np
df1=pd.DataFrame({'A':[1,2,3],'B':[np.nan,np.nan,np.nan],'C':['X','Y','Z']})
df1
A B C
0 1 NaN X
1 2 NaN Y
2 3 NaN Z
df2=pd.DataFrame({'A':[3,1,2],'B':['U','V','W'],'D':[7,8,9]})
df2
A B D
0 3 U 7
1 1 V 8
2 2 W 9
如果我这样做:
df1.merge(df2,how='left',on='A',sort=True)
A B_x C B_y D
0 1 NaN X V 8
1 2 NaN Y W 9
2 3 NaN Z U 7
数据是有序的,但 B 有多个实例。 如果我这样做:
df1.fillna(df2)
A B C
0 1 U X
1 2 V Y
2 3 W Z
数据乱序,但是替换了NaN。
我希望输出是一个如下所示的数据框:
df3
A B C D
0 1 V X 8
1 2 W Y 9
2 3 U Z 7
【问题讨论】: