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