Выбор данных (select) в Pandas
Под «select» в Pandas понимается извлечение части DataFrame — определённых
столбцов, строк или ячеек. Способов несколько, и каждый удобен в своих случаях.
Когда использовать
Подготовить «узкий» DataFrame для модели.
Достать одну метрику для построения графика.
Извлечь подвыборку по условию для отчёта.
Пример 1. Один и несколько столбцов
import pandas as pd
df = pd.DataFrame({"a": [1, 2], "b": [3, 4], "c": [5, 6]})
print(df["a"])
print(df[["a", "c"]])
Output:
0 1
1 2
Name: a, dtype: int64
a c
0 1 5
1 2 6
Пример 2. Срез строк
import pandas as pd
df = pd.DataFrame({"v": [10, 20, 30, 40]})
print(df[1:3])
Output:
v
1 20
2 30
Пример 3. .loc с явными столбцами
import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}, index=["x", "y", "z"])
print(df.loc[["x", "z"], ["a"]])
Output:
a
x 1
z 3
Пример 4. .filter по паттерну
import pandas as pd
df = pd.DataFrame({"temp_c": [22], "temp_f": [71], "humidity": [55]})
print(df.filter(like="temp"))
Output:
temp_c temp_f
0 22 71
Пример 5. .query
import pandas as pd
df = pd.DataFrame({"sensor": ["A", "B", "C"], "temp": [22, 35, 41]})
print(df.query("temp > 30"))
Output:
sensor temp
1 B 35
2 C 41
query принимает строку с выражением — удобно для длинных условий.
Пример 6. Исключить столбцы
import pandas as pd
df = pd.DataFrame({"a": [1, 2], "b": [3, 4], "c": [5, 6]})
print(df.drop(columns=["b"]))
Output:
a c
0 1 5
1 2 6
Пример 7. Выбор по типу
import pandas as pd
df = pd.DataFrame({"a": [1, 2], "b": ["x", "y"], "c": [1.5, 2.5]})
print(df.select_dtypes(include="number"))
Output:
a c
0 1 1.5
1 2 2.5
Подводные камни
df["a"]возвращаетSeries,df[["a"]]—DataFrame. Это важно при дальнейших операциях..queryне работает, если в имени столбца есть пробелы — переименуйте.Срез
df[1:3]работает по позициям, аdf.loc[1:3]— по меткам индекса.
См. также
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.