Pandas pd.merge导致NaN而不是实际值

时间:2016-04-06 03:10:12

标签: python pandas merge

我使用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

我已经确认两种数据集的dtypes相同。一切都是对象,ID除外是int64。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

示例一中的单位不同,合并的结果为

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

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

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

答案 1 :(得分:0)

问题不在于我的代码,而在于CSV文件中的数据。 users3.csv文件中有一个错误的空间,用于Units列中的值。一旦该空间被移除,我就能够产生预期的结果。