[英]Pandas: Not able to set a cell value based on a condition on other column
我有一個 dataframe 如下:
ID Score Bid_Doc_ID
1 67 3
2 -1 2
3 -1 7
我想將Bid_Doc_ID
字段設置為 -1 其中Score
== -1
為此,我使用以下代碼:
df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1
我收到以下錯誤:
AttributeError: 'int' object has no attribute 'loc'
即使我嘗試過:
df = df.loc[df['Score'].astype(str)==-1,'Bid_Doc_ID']=-1
仍然得到同樣的錯誤。
我的預期結果:
ID Score Bid_Doc_ID
1 67 3
2 -1 -1
3 -1 -1
這個問題似乎很微不足道,但有些我錯過了一些東西!
嘗試刪除分配新df
的代碼部分:
df = df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # change
df.loc[df['Score']==-1,'Bid_Doc_ID']=-1 # to be this
或者,另一種選擇是,您可以使用np.where
獲得所需的東西?
import numpy as np
df['Bid_Doc_ID'] = np.where(df['Score'] == -1, -1, df['Bid_Doc_ID'])
當您運行df = df.loc[df['Score'].astype(str)==-1,'Bid_Doc_ID']=-1
時,看起來您用 integer 或 boolean 覆蓋了您的 df (這就是為什么'int' object has no attribute 'loc'
錯誤)。 嘗試檢查 df 的值來驗證這一點。
如果您在適當的位置修改 DF 會發生很多事情,這絕不是一個好主意,最好將修改后的 dataframe 分配給一個新變量,例如df_fixed
,它會為您節省大量調試時間,甚至更糟,發布生產中的錯誤。
試試下面的,不是太簡潔,但是它使用純pandas方法和方法鏈接,這是這幾天推薦的方式。
bid_doc_id_fixed = df.apply(lambda x: -1 if x['Score'] == -1 else x['Bid_Doc_ID'], axis=1)
df_fixed = df.assign(Bid_Doc_ID=bid_doc_id_fixed)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.