Como substituir valores pandas por NaN por threshold

Ao processar datasets pandas, frequentemente você precisa remover valores acima ou abaixo de um dado threshold de um dataset. Uma maneira de “remover” valores de um dataset é substituí-los por valores NaN (not a number) que são tipicamente tratados como valores “ausentes”.

Por exemplo: Para substituir valores da coluna x por NaN onde a coluna x é < 0.75 em um DataFrame df, use este snippet:

pandas_replace_by_nan.py
import numpy as np

df["x"][df["x"] < -0.75] = np.nan

Por exemplo, podemos rodar isso no dataset de exemplo de série temporal pandas do TechOverflow. O dataset original tem duas colunas: Sine e Cosine e se parece com isso:

Original pandas time series plot with sine and cosine columns

Após rodar

pandas_replace_sine_by_nan.py
df["Sine"][df["Sine"] < -0.75] = np.nan

você pode ver que todos os valores de Sine abaixo de 0.75 foram omitidos do plot, mas todos os valores da coluna Cosine são deixados inalterados:

Pandas time series plot with sine values below threshold replaced by NaN

Exemplo de código completo:

pandas_timeseries_complete_example.py
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.style.use("ggplot")

# Load pre-built time series example dataset
df = pd.read_csv("https://datasets.techoverflow.net/timeseries-example.csv", parse_dates=["Timestamp"])
df.set_index("Timestamp", inplace=True)

# Plot original code
df.plot()
plt.savefig("TimeSeries-Original.svg")

e este é o código para plotar o dataset filtrado:

pandas_timeseries_filtered.py
df[df < -0.75] = np.nan
df.plot()
plt.savefig("TimeSeries-NaN.svg")

Check out similar posts by category: Data Science Pandas Python