我有2个Pandas Dataframes。
第一个看起来像这样:
date rank id points
2010-01-04 1 100001 10550
2010-01-04 2 100002 9205
第二个是这样的:
id name
100001 A
100002 B
我想通过id
列加入两个数据框。所以结果应该是这样的:
date rank id points name
2010-01-04 1 100001 10550 A
2010-01-04 2 100002 9205 B
几周前我为此编写了代码,但由于某种原因它不再起作用了。在执行此代码加入后,我最终得到一个空数据框:
join = pd.merge(df1,df2, on='id')
为什么join
为空?
答案 0 :(得分:1)
短篇小说:正如comment已经指出的那样,我正在将字符串与整数进行比较。
长篇故事:我不希望python将两个输入csv文件的id列解析为不同的datatpyes。 df1.id的类型为Object。 df2.id的类型为int。我需要找出为什么df1.id被解析为Object而不是自动解析为int,因为它只包含数字。
证明它与我的CSV文件的编码有关。在notepad ++中,文件被编码为普通的UTF-8。似乎pandas不喜欢这个,因为当我试图将id列转换为int时,它引发了像ValueError: invalid literal for int() with base 10: '\ufeff100001'
这样的错误。数字100001
是第一行的第一个ID。因此,在此数字(在文件的最开头)\ufeff
之前似乎有一些编码字符阻止了pandas将整个列解析为int。在notepad ++中我然后将文件的编码更改为UTF-8 without BOM
,然后一切正常。