为了账号安全,请及时绑定邮箱和手机立即绑定

pandas - drop_duplicates 没有按预期工作

pandas - drop_duplicates 没有按预期工作

梦里花落0921 2022-01-11 16:49:02
根据此处的答案,我正在尝试从一个数据框中删除其他数据框中存在的行。它适用于这个输入:csv1:sale_date,price,latitude,longitudeWed May 21 00:00:00 EDT 2008,141000,38.423251,-121.444489Wed May 21 00:00:00 EDT 2008,146250,38.48742csv2:sale_date,price,latitude,longitudeWed May 21 00:00:00 EDT 2008,146250,38.48742代码:>>> a = pd.read_csv('../test.csv', escapechar='\\')>>> a                      sale_date   price   latitude   longitude0  Wed May 21 00:00:00 EDT 2008  141000  38.423251 -121.4444891  Wed May 21 00:00:00 EDT 2008  146250  38.487420         NaN>>> b = pd.read_csv('../test1.csv', escapechar='\\')>>> b                      sale_date   price  latitude  longitude0  Wed May 21 00:00:00 EDT 2008  146250  38.48742        NaN>>> pd.concat([a,b]).drop_duplicates(keep=False)                      sale_date   price   latitude   longitude0  Wed May 21 00:00:00 EDT 2008  141000  38.423251 -121.444489这按预期工作。但是,一旦第一个 csv 中还有其他行,它就不起作用了。场景 2 在 csv1 中有额外的行csv1:sale_date,price,latitude,longitudeWed May 21 00:00:00 EDT 2008,141000,38.423251,-121.444489Wed May 21 00:00:00 EDT 2008,146250,38.48742Wed May 21 00:00:00 EDT 2008,147308,38.658246a,-121.375469acsv2:sale_date,price,latitude,longitudeWed May 21 00:00:00 EDT 2008,146250,38.48742代码:>>> a = pd.read_csv('../test.csv', escapechar='\\')>>> a                      sale_date   price    latitude     longitude0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.4444891  Wed May 21 00:00:00 EDT 2008  146250    38.48742           NaN2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a>>> b = pd.read_csv('../test1.csv', escapechar='\\')>>> b                      sale_date   price  latitude  longitude0  Wed May 21 00:00:00 EDT 2008  146250  38.48742        NaN请注意,它还将合并行中第二个重复的纬度值更改为38.4874from38.48742我在这里遗漏了什么还是熊猫有错误?
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

就像@ayhan 评论的那样,aDataFrame 中的问题是列latitude和longitude列中的数字之间的字符串,因此所有列都被转换为字符串。


在另一个 DataFrame 中,默认情况下将列转换为floats。


一种可能的解决方案是使用DataFrame 的dtype参数b:


b = pd.read_csv('../test1.csv', escapechar='\\', dtype={'latitude':str, 'longitude':str})


df = pd.concat([a,b]).drop_duplicates(keep=False)

print (df)

                      sale_date   price    latitude     longitude

0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.444489

2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a

或to_numeric用于 中的列a:


a['latitude'] = pd.to_numeric(a['latitude'], errors='ignore')

a['longitude'] = pd.to_numeric(a['longitude'], errors='ignore')

df = pd.concat([a,b]).drop_duplicates(keep=False)

print (df)

                      sale_date   price    latitude     longitude

0  Wed May 21 00:00:00 EDT 2008  141000   38.423251   -121.444489

2  Wed May 21 00:00:00 EDT 2008  147308  38.658246a  -121.375469a


查看完整回答
反对 回复 2022-01-11
  • 1 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号