Python每日一记18>>>merge小问题

三十年前,33 岁的软件工程师蒂姆·伯纳斯·李(Tim Berners-Lee)还在瑞士日内瓦郊区的欧洲核子研究组织(CERN)工作,当时他提交了名为“信息管理:提案”的文件,起初这是一个用于更好地管理和监控实验室研究流程的建议,可谁能想到,这份提案竟然改变了全世界沟通的方式,为人类敲开了信息时代的大门。
三十年后,蒂姆·伯纳斯·李爵士在纪念万维网诞生三十周年的活动前夕发布了一封公开信,他重新审视了对互联网的看法。虽然互联网为全人类带来了无数的便利,但今天,这个被冠以“万维网之父”的人只想要拯救互联网,甚至推翻互联网。
------以上摘自公众号AI前线
今日分享在公司工作进行数据处理遇到的一个问题:
merge函数进行合并的过程中,出现了这样的问题— You are trying to merge on object and int64 columns,If you wish to proceed you should use concat.
请注意以下数据类型对应的表。
在这里插入图片描述
不知你是否遇到了这样的问题,总之我开始是完全蒙的状态,在网上查了很多,归根结底需要对数据进行转换,但是原因并没有说的很明白。那这个问题的原因到底是什么呢,从字面的意思翻译大概的内容是,你正在合并的数据依据的是一个对象和一个64位整数的列,恍然一看,根本翻译不通顺,那是因为在pandas(我是用pd.read()读取的数据)中object就是对应的string,也就是字符串(注意看上面的图片)。我们根据推测,大致可以想到原因是我们on=主键这个参数是有问题的,问题在于我们要合并的两个数据源主键的列不是同一个数据类型。所以网上解决方案都是利用int()等方式进行转换再merge就不会报错的。
依据此思路,我也对我的数据进行了转换,当我对会员卡号进行int()转换的时候,报错了,意思大概是“数据正在查询…”无法转换成int类型,看到这里我明白了,我的会员卡号一列中有字符串的内容存在,恰恰就是“数据正在查询…”这句话,这是导出数据出现的错误。当我将含有这句话的行删除之后再进行merge(a,b,how=left,on=‘会员卡号’)之后,程序就正常运行了。
综上,在出现上述问题之后,你需要优先查看数据的类型dataframe.dtypes,再转换数据类型DataFrame.astype(dtype, copy=True, errors=‘raise’, **kwargs)
更多关于数据类型转换的基础知识与方法详见以下链接
http://www.cnblogs.com/onemorepoint/p/9404753.html

猜你喜欢

转载自blog.csdn.net/weixin_44663675/article/details/88673417