combine_first()合并两表数据的一个注意点

注意点:combine_first()合并两表数据默认是按照索引合并的。

问题出现背景:

我想要将df1中class的空值,用df2的class的值填充,而且是要按照对应的No索引填充。

查书发现有个函数适合

套用代码

# 读取第一张表
file_path1 = r'C:\Users\27388\Desktop\数据挖掘作业\2021\E\附件4 - 副本.xlsx'
df1 = pd.read_excel(file_path1)

# 读取第二张表
file_path2 = r'D:\spyderdata\predicted_Class_data.xlsx'
df2 = pd.read_excel(file_path2)

df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)

result = df1.combine_first(df2)

出现问题:
运行后查看结果,按照原本的结果,no为5的填补空值应该是C的,但是打印的却是A

而且后面还有空值并没有填充

发现问题:

篮框框出来的可以发现,它是按照索引来进行合并的,这也解释了为什么后面会有一部分没有填充了。

解决问题:

既然默认的是索引匹配的,那么将它换成按照我指定的索引(No)就好了

import pandas as pd

# 读取第一张表
file_path1 = r'C:\Users\27388\Desktop\数据挖掘作业\2021\E\附件4 - 副本.xlsx'
df1 = pd.read_excel(file_path1)

# 读取第二张表
file_path2 = r'D:\spyderdata\predicted_Class_data.xlsx'
df2 = pd.read_excel(file_path2)

# 筛选出df1中class为空的行
result = df1.set_index('No').combine_first(df2.set_index('No')).reset_index()

这样刚开始提出的两个问题就解决了。

到此结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值