Python:Pandas合并导致NaN

3
我正在尝试使用pandas执行合并操作。这两个文件有一个共同的关键字(“KEY_PLA”),我正在尝试使用左连接。但不幸的是,从第二个文件传输到第一个文件的所有列都具有NaN值。
以下是我迄今为止所做的事情:
df_1 = pd.read_excel(path1, skiprows=1)
df_2 = pd.read_excel(path2, skiprows=1)

df_1.columns = ["Index", "KEY", "KEY_PLA", "INFO1", "INFO2"]
df_2.columns = ["Index", "KEY_PLA", "INFO4"]

df_1.drop(["Index"], axis=1, inplace=True)
df_2.drop(["Index"], axis=1, inplace=True)

# Merge all dataframes
df_merge = pd.DataFrame()

df_merge = df_1.merge(df_2, left_on="KEY_PLA", right_on="KEY_PLA", how="left")
print(df_merge)

这是结果:Result 这里是Excel文件: Excel1 Excel2 代码有什么问题?我也检查了类型,甚至将列转换为字符串。但是什么都不起作用。

1
请发帖 df_1.head().to_dict('list')df_2.head().to_dict('list'),这样我们就不必下载几百MB的数据来查看问题了。 - unutbu
1个回答

3

我认为问题在于联接列 KEY_PLA 的不同 类型,一个明显是整数,而另一个是 字符串

解决方案是将它们转换为相同的类型,例如转换为 int

print (df_1['KEY_PLA'].dtype)
object

print (df_2['KEY_PLA'].dtype)
int64

df_1['KEY_PLA'] = df_1['KEY_PLA'].astype(int)

非常感谢!那个有效 :) 但是为什么 df_1['KEY_PLA'] = df_1['KEY_PLA'].astype(str)df_2['KEY_PLA'] = df_2['KEY_PLA'].astype(str) 不起作用呢? - Jannik
它应该与df_2['KEY_PLA'] = df_2['KEY_PLA'].astype(str)一起工作,因为“object”明显是“string”。 - jezrael
这是另一种可能的解决方案 :) - jezrael
但实际上它并没有。它仍然是您可以在上面的图片中看到的结果。 - Jannik
1
嗯,从图片看来似乎有尾随的\n,所以需要使用 df_1['KEY_PLA'] = df_1['KEY_PLA'].str.strip()df_2['KEY_PLA'] = df_2['KEY_PLA'].astype(str) - jezrael
2
啊,我找到错误了。在第二个文件中,所有条目都包括“/n”。因此键不相等。非常感谢您 :-) - Jannik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接