注意点: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()
这样刚开始提出的两个问题就解决了。
到此结束!