【问题标题】:Python: Pandas merge leads to NaNPython:Pandas 合并导致 NaN
【发布时间】:2018-06-09 17:50:24
【问题描述】:

我正在尝试与熊猫执行合并。这两个文件有一个公用密钥(“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)

这是结果:

这里是excel文件:

Excel1 Excel2

代码有什么问题?我还检查了类型,甚至将列转换为字符串。但没有任何效果。

【问题讨论】:

  • 请发帖 df_1.head().to_dict('list')df_2.head().to_dict('list') 这样我们就不必下载 MB 来查看这个问题了。

标签: python pandas dataframe merge


【解决方案1】:

我认为连接列KEY_PLA 的问题是不同的types,显然一个是整数,另一个是strings。

解决方案是相同的,例如致ints:

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)
  • 它应该与df_2['KEY_PLA'] = df_2['KEY_PLA'].astype(str)一起工作,因为object显然是string
  • 这是另一种可能的解决方案:)
  • hmmmm,看图好像有\n,所以需要df_1['KEY_PLA'] = df_1['KEY_PLA'].str.strip()df_2['KEY_PLA'] = df_2['KEY_PLA'].astype(str)
  • 啊,我发现了错误。在第二个文件中,所有条目都包含一个“/n”。因此,密钥不相等。非常感谢:-)
猜你喜欢
  • 2019-07-12
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多