Манипуляции с 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.