python - 合并不同大小的数据帧并同时覆盖 NaN 值
问题描述
我想在不同大小的 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
解决方案
d = dict(zip(df2.A,df2.B))
df1["B"] = df1["A"].map(d)
del df2["B"]
df1.merge(df2,how='left',on='A',sort=True)
推荐阅读
- download - 如何在 Flutter 网页上编码和下载 png
- torch - torchtext - 内容处置错误 - download_from_url
- reactjs - 在 React Table 中,如何使用 state 分别更新每一行中的下拉值
- server - 监控通过Linux服务器中端口的请求数
- android - 如何更改 DatePicker 的字体系列或大小 - React Native
- java - 每个 Intellij maven 模块的自定义 Maven 设置/构建位置
- css - 如何将 vue 组件上的类和样式属性传递给 $attrs 等不同的元素?
- loops - Range through functions
- sql-server - Spring JPA @Procedure 无法与多个 OUT 子句一起正常工作
- asp.net - 找不到键为“X”的资源对象