[英]Pandas replace values in dataframe conditionally based on string compare
我有如下3列的熊貓數據框。 我想比較每一列,以查看該值是否與特定字符串匹配,如果是,則將其替換為NaN。
例如,如果數據幀的第1列中有5個值:
abcd
abcd
defg
abcd
defg
如果比較字符串是defg
,則數據幀中第1列的最終結果應該是。
abcd
abcd
NaN
abcd
NaN
您可以使用numpy where來根據布爾條件設置值:
import numpy as np
df["col_name"] = np.where(df["col_name"]=="defg", np.nan, df["col_name"])
顯然,用實際的列名替換col_name
。
一種替代方法是使用pandas .loc
來更改DataFrame中的值:
df.loc[df["col_name"]=="defg", "col_name"] = np.nan
您可以使用mask
,這將用NaN替換整個數據框中的'defg':
df.mask(df == 'defg')
輸出:
0
0 abcd
1 abcd
2 NaN
3 abcd
4 NaN
您還可以對列執行此操作:
df['col1'].mask(df['col1'] == 'defg')
或者在他的解決方案中使用@pygo建議的替換
df['col1'].replace('defg',np.nan)
使用pandas內置解決方案使用replace
方法作為正則表達式和inplace方法使其在數據框中永久存在,同時使用numpy將匹配值替換為NaN
。
import pandas as pd
import numpy as np
示例數據框:
df
col1
0 abcd
1 abcd
2 defg
3 abcd
4 defg
結果:
df['col1'].replace(['defg'], np.nan, regex=True, inplace=True)
df
col1
0 abcd
1 abcd
2 NaN
3 abcd
4 NaN
有很多解決方案...如果您想練習使用lambda函數,可以隨時做...
df['Col1'] = df.Col1.apply(lambda x: np.nan if x == 'defg' else x)
結果:
0 abcd
1 abcd
2 NaN
3 abcd
4 NaN
Seconds: 0.0020899999999999253
盡管經過一些單元測試,但處理時間可能比上述解決方案要慢一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.