Манипуляции с DataFrame

Под манипуляциями понимаются операции, изменяющие структуру или содержимое таблицы: добавить столбец, удалить, переименовать, применить функцию ко всем ячейкам. В Pandas почти все методы возвращают новый объект — это удобно для цепочек.

Когда использовать

  • Преобразовать сырой лог в датасет под отчёт.

  • Добавить вычисляемое поле (например, переведённое в Фаренгейты).

  • Подготовить таблицу к экспорту в формате клиента.

Пример 1. Новый столбец

import pandas as pd

df = pd.DataFrame({"temp_c": [20, 25, 30]})
df["temp_f"] = df["temp_c"] * 9 / 5 + 32
print(df)

Output:

   temp_c  temp_f
0      20    68.0
1      25    77.0
2      30    86.0

Пример 2. assign (для цепочек)

import pandas as pd

df = pd.DataFrame({"temp_c": [20, 25, 30]})
df2 = (
    df
    .assign(temp_f=lambda d: d["temp_c"] * 9/5 + 32)
    .assign(hot=lambda d: d["temp_c"] > 25)
)
print(df2)

Output:

   temp_c  temp_f    hot
0      20    68.0  False
1      25    77.0  False
2      30    86.0   True

Пример 3. Удаление

import pandas as pd

df = pd.DataFrame({"a": [1, 2], "b": [3, 4], "c": [5, 6]})
print(df.drop(columns=["b"]))
print(df.drop(index=0))

Output:

   a  c
0  1  5
1  2  6
   a  b  c
1  2  4  6

Пример 4. Переименование

import pandas as pd

df = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
df2 = df.rename(columns={"a": "alpha", "b": "beta"})
print(df2)

Output:

   alpha  beta
0      1     3
1      2     4

Пример 5. apply по столбцу

import pandas as pd

df = pd.DataFrame({"v": [10, 20, 30]})
df["label"] = df["v"].apply(lambda x: "high" if x > 15 else "low")
print(df)

Output:

    v label
0  10   low
1  20  high
2  30  high

Пример 6. apply по строкам

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3], "b": [10, 20, 30]})
df["sum"] = df.apply(lambda r: r["a"] + r["b"], axis=1)
print(df)

Output:

   a   b  sum
0  1  10   11
1  2  20   22
2  3  30   33

Пример 7. map для замены значений

import pandas as pd

df = pd.DataFrame({"status": ["ok", "fail", "ok"]})
df["status_ru"] = df["status"].map({"ok": "норма", "fail": "ошибка"})
print(df)

Output:

  status status_ru
0     ok     норма
1   fail    ошибка
2     ok     норма

Подводные камни

  • apply(..., axis=1) медленный — для простых операций используйте векторизацию (df["a"] + df["b"]).

  • rename без inplace=True возвращает новый объект — не забудьте присвоить.

  • map для значений, отсутствующих в словаре, вернёт NaN — это полезный способ найти «не охваченные» категории.

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.