簡體   English   中英

熊貓根據字符串比較有條件地替換數據框中的值

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

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