【问题标题】:Pandas pd.merge results in NaN rather than the actual valuePandas pd.merge 结果为 NaN 而不是实际值
【发布时间】:2016-04-06 03:10:11
【问题描述】:

我使用 pd.merge 得到了两种不同的合并行为,我无法解释,我希望有人能伸出援手。

示例一

手动创建数据框会产生正确的合并行为。即,Seller 列的值正确。

df1 = DataFrame([[1,'Dude','2016-03-07 16:21', '1e2345a6-ae7e-89e0-123d-b4567fcc8fb9']],columns=['ID','Name','Created at', 'Unit'])

df2 = DataFrame([['SellTEST','1e2345a6-ae7e-89e0-123d-b4567fcc8fb9']], columns=['Seller', 'Unit'])

merge_df = pd.merge(df1, df2, on=['Unit'],how='left')

print (merge_df)

结果:

   ID  Name        Created at                                  Unit    Seller
0   1  Dude  2016-03-07 16:21  1e2345a6-ae7e-89e0-123d-b4567fcc8fb9  SellTEST

如果我从 .csv 文件中读取相同的数据,我会收到不正确的合并结果。 Seller 列现在包含 NaN:

示例二

ticketdata = r'tickets3.csv'
userdata = r'users3.csv'

df1 = pd.read_csv(ticketdata)
df2 = pd.read_csv(userdata)

merge_df = pd.merge(df1, df2, on=['Unit'],how='left')
print (merge_df)

结果:

   ID  Name        Created at                                  Unit    Seller
0   1  Dude  2016-03-07 16:21  1e2345a6-ae7e-89e0-123d-b4567fcc8fb9     NaN

我已确认两个数据集的 dtype 相同。除了 ID 是 int64 之外,一切都是 Object。

我错过了什么?

【问题讨论】:

  • 能否在read_csv 之后添加来自df1df2 的数据?

标签: python pandas merge


【解决方案1】:

您在示例一中的单位不同,合并的结果是

   ID  Name        Created at                                  Unit Seller
0   1  Dude  2016-03-07 16:21  7e5652a0-ae3e-11e5-820d-b3523fcc3fb4    NaN

(我从 Ex 1 运行代码。)也许您不小心更改了 Unit?

(这不应该是一个答案,但我还不能发表评论。)

【讨论】:

  • 感谢您查看 - df1 的单位值有误。我更新了它,所以它现在应该可以正常工作了。
【解决方案2】:

问题不在于我的代码,而在于 CSV 文件中的数据。 users3.csv 文件中的 Units 列中的值存在错误空间。删除该空间后,我就能够产生所需的结果。

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 2018-08-02
    • 2014-08-29
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多