我想在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
您可以使用:
说明:
sort_values
根据A
列对df2
进行排序。你知道吗reset_index (drop = True)
是按正确顺序连接DataFrame
所必需的。你知道吗我使用
concat
将df1
'C'
列与df2
连接起来,后者的columns
现在顺序正确。最后,我使用reindex
来重新定位DataFrame
df3
的columns
。你知道吗您可以看到数据帧
df2
的顺序没有改变,因为我们没有使用inplace = True
。你知道吗相关问题 更多 >
编程相关推荐