已有183人关注
pandas对合并数据去重
发表在Python图书答疑 2021-07-22 《Python数据分析从入门到实践》第4章 Pandas进阶 118页-118页
是否精华
版块置顶:

第4章P118页中“对合并数据去重”(示例38),使用pandas的merge方法“df_merge=pd.merge(df1,df2,on='编号',left_index=True,right_index=True)”,编写完成后显示如下错误:

Traceback (most recent call last):

  File "C:/Python(示例37).py", line 16, in <module>

    df_merge = pd.merge(df1,df2,on='编号',right_index=True)

  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\reshape\merge.py", line 87, in merge

    validate=validate,

  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\reshape\merge.py", line 650, in __init__

    self._validate_specification()

  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\reshape\merge.py", line 1304, in _validate_specification

    'Can only pass argument "on" OR "left_index" '

pandas.errors.MergeError: Can only pass argument "on" OR "left_index" and "right_index", not a combination of both.



教材所含资料包中的“demo”文件也出现同错误提示,请教如何修改此代码?

分享到:
精彩评论 8
kiku
学分:317 LV5
2021-07-23
沙发

错误提示信息告诉你了,只能传递参数"on"或"left_index"和"right_index",不能两者的组合。

df_merge=pd.merge(df1,df2,on='编号',left_index=True,right_index=True)这里"on"和"left_index"、"right_index"不能一起用
Ele_1626935751
学分:4 LV1
2021-07-24
板凳

kiku 发表于2021-07-23 11:45

错误提示信息告诉你了,只能传递参数"on"或"left_index"和"right_index",不能两者的组合。

df_merge=pd.merge(df1,df2,on='编号',left_index=True,right_index=True)这里"on"和"left_index"、"right_index"不能一起用

谢谢回复!

错误提示看懂了,那么这个示例38关于去重的关键代码会不会是错的,按照on或left+right的执行结果来看,on='编号'可以实现去重,而left+right只能实现合并索引(示例37)

kiku
学分:317 LV5
2021-07-27
地板

我这没有书,你能截图你的测试数据给我看一下吗

kiku
学分:317 LV5
2021-07-27
4L

Ele_1626935751 发表于2021-07-24 19:11

谢谢回复!

错误提示看懂了,那么这个示例38关于去重的关键代码会不会是错的,按照on或left+right的执行结果来看,on='编号'可以实现去重,而left+right只能实现合并索引(示例37)

不需要用on,你用how='outer'试一下,看能不能得到你想要的结果

kiku
学分:317 LV5
2021-07-27
5L

Ele_1626935751 发表于2021-07-24 19:11

谢谢回复!

错误提示看懂了,那么这个示例38关于去重的关键代码会不会是错的,按照on或left+right的执行结果来看,on='编号'可以实现去重,而left+right只能实现合并索引(示例37)

FYI,image.png

给你一个友善的小建议,遇到问题多百度,网上还是有很多参考资料和解决方案的,你在这里提问还要等别人回复,个人觉得比较慢,你也可以去CSDN找一些问题的解决办法,里面有很多大神程序员,自己去找答案学起来会更快,学技术的真的要多用百度!

Ele_1626935751
学分:4 LV1
2021-07-29
6L

kiku 发表于2021-07-27 18:17

FYI,image.png

给你一个友善的小建议,遇到问题多百度,网上还是有很多参考资料和解决方案的,你在这里提问还要等别人回复,个人觉得比较慢,你也可以去CSDN找一些问题的解决办法,里面有很多大神程序员,自己去找答案学起来会更快,学技术的真的要多用百度!

谢谢你的好建议噢,就是看的有点蒙圈之前都有百度过的,原谅跨行学习的小白没看懂。

教材的第一个示例是“通过索引列合并数据”,关键代码如下:

df_merge = pd.merge(df1,df2,right_index=True, left_index=True)

执行后得到一个“编号_x”和一个“编号_y”的两个相同索引列。


接着第二个示例是“对合并数据去重”,设置按指定列和列索引合并数据,关键代码:

df_merge = pd.merge(df1,df2,on='编号',left_index=True,right_index=True)

执行后得到只有一列“编号”的df对象。


问题就是按照教材上的代码编写就出现了开篇的错误提示,然后看不懂。。。

kiku
学分:317 LV5
2021-07-30
7L

你这两个df都只有一列的话直接合并取并集就可以了吧,不要用on,用how='outer'试一下

kiku
学分:317 LV5
2021-07-30
8L

或可加我微信odd0928

首页上一页 1 下一页尾页 8 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照