尝试合并 2 个数据帧但得到 ValueError

新手上路,请多包涵

这是我保存在两个变量中的两个数据框:

 > print(df.head())
>
          club_name  tr_jan  tr_dec  year
    0  ADO Den Haag    1368    1422  2010
    1  ADO Den Haag    1455    1477  2011
    2  ADO Den Haag    1461    1443  2012
    3  ADO Den Haag    1437    1383  2013
    4  ADO Den Haag    1386    1422  2014
> print(rankingdf.head())
>
           club_name  ranking  year
    0    ADO Den Haag    12    2010
    1    ADO Den Haag    13    2011
    2    ADO Den Haag    11    2012
    3    ADO Den Haag    14    2013
    4    ADO Den Haag    17    2014

我正在尝试使用以下代码合并这两个:

 new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')

添加 how=‘left’ 是因为我的ranking_df 中的数据点少于标准df 中的数据点。

预期的行为是这样的:

 > print(new_df.head())
>

      club_name  tr_jan  tr_dec  year    ranking
0  ADO Den Haag    1368    1422  2010    12
1  ADO Den Haag    1455    1477  2011    13
2  ADO Den Haag    1461    1443  2012    11
3  ADO Den Haag    1437    1383  2013    14
4  ADO Den Haag    1386    1422  2014    17

但我得到这个错误:

ValueError:您正在尝试合并 object 和 int64 列。如果你想继续,你应该使用 pd.concat

但我不想使用 concat ,因为我想合并树而不仅仅是添加它们。

另一个在我看来很奇怪的行为是,如果我将第一个 df 保存到 .csv 然后将该 .csv 加载到数据框中,我的代码就可以工作。

代码:

 df = pd.DataFrame(data_points, columns=['club_name', 'tr_jan', 'tr_dec', 'year'])
df.to_csv('preliminary.csv')

df = pd.read_csv('preliminary.csv', index_col=0)

ranking_df = pd.DataFrame(rankings, columns=['club_name', 'ranking', 'year'])

new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')

我认为它与 index_col=0 参数有关。但是我不知道无需保存就可以修复它,这并不重要,但我必须这样做是一种烦恼。

原文由 PEREZje 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 527
2 个回答

在您的一个数据框中,年份是一个字符串,另一个是 int64,您可以先将其转换然后加入(例如 df['year']=df['year'].astype(int) 或 RafaelC 建议的 df.year.astype(int)

编辑:还要注意安德森朱的评论:以防万一您有 None 或其中一个数据框中缺少值,您需要使用 Int64 而不是 int 。请参阅 此处 的参考资料。

原文由 Arnon Rotem-Gal-Oz 发布,翻译遵循 CC BY-SA 4.0 许可协议

我发现我的 dfs 都有相同类型的列( str )但是从 join 切换到 —b204bbb03eb52047b0f85a96c7-8 merge 问题解决了。

原文由 Alex Moore-Niemi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题