亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號