簡體   English   中英

使用loc命令替換值

[英]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)

replace docs中

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM