[英]Replace values using loc command
有一個數據框,我需要將512以上的值replace
為263。
因此,我首先使用以下代碼行來過濾索引:
df.loc[df['Fare']>512]['Fare'].astype(int)
結果如下:
258 512
679 512
737 512
1234 512
Name: Fare, dtype: int64
看起來不錯! 因為它用512以上的值過濾了所有4行。現在我需要將此值替換為263:
df.loc[df['Fare']>512]['Fare']=df.loc[df['Fare']>512]['Fare'].astype(int).replace({512:263},inplace=True)
但這並沒有改變我的數據框。 例如,當我搜索索引737時,我發現了這一點:
df.iloc[737]
結果:
Age 35
Fare 512.329
因此,盡管有上述代碼,票價仍未更改為263。
使用.loc
您要使用[row, col]
而不是[row][col]
。
嘗試:
df.loc[df['Fare']>512, 'Fare']=df.loc[df['Fare']>512, 'Fare'].astype(int).replace({512:263},inplace=True)
有什么原因使您不只是在做
condition = df['Fare'].astype(int) > 512
df.loc[condition, 'Fare'] = 263
condition
是布爾序列, .loc
將僅將該序列中的行賦值為True
到所需值。
刪除inplace = True
選項。
df.loc[df['Fare']>512]['Fare']=df.loc[df['Fare']>512]['Fare'].astype(int).replace({512:263})
或干脆不挑釁。
df.loc[df['Fare']>512]['Fare'].astype(int).replace({512:263}, inplace=True)
inplace:bool,默認為False
如果為True,則到位。 注意:這將修改此對象上的任何其他視圖(例如,DataFrame中的列)。 如果為True,則返回調用方。
現在,您正在就地修改數據框,但是賦值運算符=
返回調用者,因此您將用原始值重寫您的編輯。
實際上,在我的inplace inplace = True
版本(pandas 0.24.0)中,它不會返回任何內容,因此上面的粗體字可能與版本有關(文檔引用了pandas 0.24.2)。
附帶說明一下,使用.loc
過濾數據然后使用replace
是多余的: .replace({512:263})
將僅轉換值512,而無需在使用.loc
之前選擇該值。
如果您這樣做:
df['Fare'].astype(int).replace({512:263}, inplace=True)
您得到相同的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.