当前位置: 首页 > 面试题库 >

尝试合并2个数据框但出现ValueError

颛孙正卿
2023-03-14
问题内容

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

> 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参数有关。但是我不知道有没有保存就修复它的想法,这没什么大不了,但是我不得不这样做。


问题答案:

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

编辑:还请注意Anderson
Zhu的评论:万一您None在一个数据框中有或缺少值,则需要使用Int64而不是int。请参阅此处的参考。



 类似资料:
  • 下面是我保存在两个变量中的两个数据: 其代码: 我认为这与index_col=0参数有关。但我不知道在不保存它的情况下修复它,这并不重要,但我不得不这样做是一种烦恼。

  • 我得合并两个DF。一个是我的主df,另一个有很多NaN 合并应该只是“忽略”NaN值,并且只在列值不是NaN的地方合并。我尝试了不同的方法,但是df2中的数据有几十种可能出现NaN值。df1有168K行,df2大约有170行,应该与任何与所有非NAN值匹配的相关联。有人知道如何有效地做到这一点吗? 经过对不同方法的广泛研究,似乎一个“神奇”的方式忽略NaNs可能是不存在的。我想在df2上应用一个掩

  • 问题内容: 我在加入熊猫方面遇到问题,并且试图找出问题所在。假设我有一个x: 我应该能够通过简单的连接命令在y = x上将y与索引上的y联接,除了同名具有+2。 我希望决赛对双方都有1941个非值。我也尝试过合并,但是我有同样的问题。 我以为正确的答案是pandas.concat([x,y]),但这也不符合我的预期。 编辑:如果您在加入方面遇到问题,请阅读下面的韦斯答案。我有一个重复的时间戳。 问

  • 问题内容: 我有以下数据框: 如何合并索引以获取: 我问,因为据我了解,即使用列进行匹配。实际上,这样做我得到: 在索引上合并是不好的做法吗?不可能吗 如果是这样,如何将索引移到称为“索引”的新列中? 问题答案: 使用,默认情况下是内部联接: 或,默认情况下为左连接: 或,默认情况下为外部联接: 样品 :

  • 问题内容: 我正在使用下面的代码合并两个csv(数据帧): 我有以下CSV文件 文件1: 文件2: 合并后 如果您注意到student_id的开头附加了0,应该将其视为文本,但是在合并并使用函数后,它将其转换为数字并删除了前导0。 即使在to_csv之后,如何将列保持为“文本”? 我认为它的to_csv函数可以再次保存为数字添加了dtype = {‘student_id’:str}。 问题答案:

  • 问题内容: 我正在尝试使用ESAPI.jar为我的Web应用程序提供安全性。基本上我刚刚开始使用ESAPI.jar。但是问题是我什至无法使用ESAPI运行简单的程序。小代码段是: 我收到此错误: 我尝试将3个ESAPI属性文件复制到我的源文件夹中,并在构建路径上进行配置,但是仍然没有成功。我尝试了许多排列和组合都无济于事。 请指导我。 属性文件的内容为: 问题答案: ESAPI.propertie