Выбор данных (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.