Фильтрация в Pandas
Фильтрация — это выбор строк, удовлетворяющих какому-то условию. В Pandas это
делается через «маски» — массивы True/False той же длины, что и
DataFrame. Эти маски можно комбинировать через & (и), | (или),
~ (не).
Когда использовать
Отсев аномалий — «убрать выбросы > 3σ».
Разделение датасета на классы (норма/перегрев).
Выборка событий за период времени.
Пример 1. Простое условие
import pandas as pd
df = pd.DataFrame({"sensor": ["A", "B", "C", "D"],
"temp": [22, 35, 19, 41]})
print(df[df["temp"] > 30])
Output:
sensor temp
1 B 35
3 D 41
Пример 2. Два условия (AND)
import pandas as pd
df = pd.DataFrame({"sensor": ["A", "B", "C", "D"],
"temp": [22, 35, 19, 41],
"hum": [55, 60, 80, 30]})
m = (df["temp"] > 30) & (df["hum"] < 50)
print(df[m])
Output:
sensor temp hum
3 D 41 30
Каждое условие в скобках — иначе порядок операций сломает логику.
Пример 3. OR
import pandas as pd
df = pd.DataFrame({"temp": [10, 35, 22, 41]})
m = (df["temp"] < 15) | (df["temp"] > 40)
print(df[m])
Output:
temp
0 10
3 41
Пример 4. between
import pandas as pd
df = pd.DataFrame({"temp": [10, 22, 35, 41]})
print(df[df["temp"].between(20, 40)])
Output:
temp
1 22
2 35
По умолчанию обе границы включены.
Пример 5. isin
import pandas as pd
df = pd.DataFrame({"device": ["bot1", "bot2", "bot3"], "v": [1, 2, 3]})
print(df[df["device"].isin(["bot1", "bot3"])])
Output:
device v
0 bot1 1
2 bot3 3
Пример 6. Инверсия маски
import pandas as pd
df = pd.DataFrame({"device": ["bot1", "bot2", "bot3"]})
print(df[~df["device"].isin(["bot2"])])
Output:
device
0 bot1
2 bot3
Пример 7. query
import pandas as pd
df = pd.DataFrame({"temp": [22, 35, 41], "hum": [55, 60, 30]})
print(df.query("temp > 30 and hum < 50"))
Output:
temp hum
2 41 30
Подводные камни
Использовать
and/orнапрямую междуSeriesнельзя — только&/|.Не забудьте скобки вокруг каждого условия:
df["a"] > 1 & df["b"] < 2будет вычислено неправильно.NaNвсегда «выпадает» из фильтра — это бывает неожиданно. Очищайте через Пропуски (NaN) в Pandas.
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.