Как заменить значения pandas на NaN по порогу

При обработке наборов данных pandas часто нужно удалить значения выше или ниже заданного порога из набора данных. Один из способов “удалить” значения из набора данных — заменить их значениями NaN (не число), которые обычно рассматриваются как “пропущенные” значения.

Например: чтобы заменить значения столбца x на NaN, где столбец x < 0.75 в DataFrame df, используйте этот фрагмент:

pandas_replace_by_nan.py
import numpy as np

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

Например, мы можем запустить это на примере набора данных временного ряда TechOverflow pandas. Исходный набор данных имеет два столбца: Sine и Cosine и выглядит так:

Исходный график временного ряда pandas со столбцами синуса и косинуса

После выполнения

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

вы можете видеть, что все значения Sine ниже 0.75 были опущены из графика, но все значения из столбца Cosine остались без изменений:

График временного ряда pandas со значениями синуса ниже порога, заменёнными на NaN

Полный пример кода:

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")

а это код для построения отфильтрованного набора данных:

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