簡體   English   中英

如果不在值范圍內,Python Pandas 將替換值

[英]Python Pandas replace values if not in value range

如果每個值不在特定值范圍內,我想替換列的所有單元格。

例如值范圍在 0 到 10 之間

該函數應該將 np.NaN 放在所有小於 0 或大於 10 的單元格上。

我試過這個:

df.loc[(df["B"] < 5 ), "B"] = np.NaN

但它僅適用於特定值,不適用於值范圍。

是否有一個簡單的解決方案來替換特定值范圍之外的所有值,而無需遍歷所有行?

提前致謝!

我會在 func 之間選擇

df.loc[~df.B.between(0, 10), "B"] = np.nan

您可以使用 np.where,指定所需的條件。 如果為真,則產生 x,否則產生 y。

np.where(condition, x, y)

所以,解決方案是:

df.B = np.where((df.B < 0) & (df.B > 10), np.NaN, df.B)

例如:

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(0,10,size=(10, 4)), columns=list('ABCD'))

會輸出類似的東西:


    A   B   C   D
0   2   5   6   2
1   0   4   0   0
2   4   3   9   0
3   5   1   1   8
4   2   3   6   5
5   3   0   3   9
6   0   4   3   4
7   4   1   4   5
8   0   5   1   5
9   6   7   4   4

然后,如果您應用 where 條件:

df.B = np.where((df.B < 6) & (df.B > 2), np.NaN, df.B)
    A   B   C   D
0   2   NaN 6   2
1   0   NaN 0   0
2   4   NaN 9   0
3   5   1.0 1   8
4   2   NaN 6   5
5   3   0.0 3   9
6   0   NaN 3   4
7   4   1.0 4   5
8   0   NaN 1   5
9   6   7.0 4   4

您可以在此處找到更多信息: https : //numpy.org/doc/stable/reference/generated/numpy.where.html

是的,你可以這樣做:


df["B"] = df["B"].where((df["B"] >= 0) & (df["B"] <= 10))

# or
df["B"] = df["B"].map(lambda x: x if 0 <= x <= 10 else None)

# or
df.loc[(df["B"] < 0) | (df["B"] > 10), "B"] = None

更接近您的原始語法

df.loc[(df["B"] < 0 )|(df["B"] > 10 ), "B"] = np.NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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