加入两个Pandas DataFrames不再适用了吗?

时间:2015-06-16 12:13:35

标签: join pandas merge dataframe

我有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为空?

1 个答案:

答案 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,然后一切正常。