我使用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。
我错过了什么?
答案 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列中的值。一旦该空间被移除,我就能够产生预期的结果。