Как создать новые столбцы, производные от существующих?¶
In [1]: import pandas as pd
- Данные о качестве воздуха
В этом руководстве используются данные о концентрации \(NO_2\) в воздухе, предоставленные openaq и использующие пакет py-openaq. Набор данных
Исходные данныеair_quality_no2.csv
содержит значения \(NO_2\) от измерительных станций FR04014, BETR801 и London Westminster в Париже, Антверпене и Лондоне соответственно.In [2]: air_quality = pd.read_csv("data/air_quality_no2.csv", index_col=0, parse_dates=True) In [3]: air_quality.head() Out[3]: station_antwerp station_paris station_london datetime 2019-05-07 02:00:00 NaN NaN 23.0 2019-05-07 03:00:00 50.5 25.0 19.0 2019-05-07 04:00:00 45.0 27.7 19.0 2019-05-07 05:00:00 NaN 50.4 16.0 2019-05-07 06:00:00 NaN 61.9 NaN
Я хочу выразить концентрацию \(NO_2\), измеренную на станции в Лондоне, в мг/м\(^3\)
(При температуре 25 градусов Цельсия и давлении 1013 гПа коэффициент пересчета составит 1,882)
In [4]: air_quality["london_mg_per_cubic"] = air_quality["station_london"] * 1.882 In [5]: air_quality.head() Out[5]: station_antwerp station_paris station_london london_mg_per_cubic datetime 2019-05-07 02:00:00 NaN NaN 23.0 43.286 2019-05-07 03:00:00 50.5 25.0 19.0 35.758 2019-05-07 04:00:00 45.0 27.7 19.0 35.758 2019-05-07 05:00:00 NaN 50.4 16.0 30.112 2019-05-07 06:00:00 NaN 61.9 NaN NaN
Чтобы создать новый столбец, используйте скобки
[]
с именем нового столбца в левой части присваивания.
Примечание
Расчет значений выполняется поэлементно. Это означает, что все значения в столбце одновременно умножаются на 1,882. Вам не нужно использовать цикл для повторения операции с каждой из строк!
Я хочу проверить соотношение значений в Париже и Антверпене и сохранить результат в новом столбце.
In [6]: air_quality["ratio_paris_antwerp"] = ( ...: air_quality["station_paris"] / air_quality["station_antwerp"] ...: ) ...: In [7]: air_quality.head() Out[7]: station_antwerp station_paris station_london london_mg_per_cubic ratio_paris_antwerp datetime 2019-05-07 02:00:00 NaN NaN 23.0 43.286 NaN 2019-05-07 03:00:00 50.5 25.0 19.0 35.758 0.495050 2019-05-07 04:00:00 45.0 27.7 19.0 35.758 0.615556 2019-05-07 05:00:00 NaN 50.4 16.0 30.112 NaN 2019-05-07 06:00:00 NaN 61.9 NaN NaN NaN
Расчет снова поэлементный, поэтому
/
применяется для значений в каждой строке.
Другие математические операторы (+
, -
, \*
, /
) или логические операторы (<
, >
, ``= `` и другие) тоже работают поэлементно. Последнее уже использовалось в уроке по подмножеству данных для фильтрации строк таблицы с использованием условного выражения.
Если вам нужна более продвинутая логика, вы можете использовать произвольный код Python через apply()
.
Я хочу переименовать столбцы данных в соответствующие идентификаторы станций, используемые openAQ.
In [8]: air_quality_renamed = air_quality.rename( ...: columns={ ...: "station_antwerp": "BETR801", ...: "station_paris": "FR04014", ...: "station_london": "London Westminster", ...: } ...: ) ...:
In [9]: air_quality_renamed.head() Out[9]: BETR801 FR04014 London Westminster london_mg_per_cubic ratio_paris_antwerp datetime 2019-05-07 02:00:00 NaN NaN 23.0 43.286 NaN 2019-05-07 03:00:00 50.5 25.0 19.0 35.758 0.495050 2019-05-07 04:00:00 45.0 27.7 19.0 35.758 0.615556 2019-05-07 05:00:00 NaN 50.4 16.0 30.112 NaN 2019-05-07 06:00:00 NaN 61.9 NaN NaN NaN
Функцию
rename()
можно использовать как для меток строк, так и для меток столбцов. Предоставьте словарь с текущими именами в качестве ключей и новыми именами в качестве значений, чтобы обновить соответствующие имена.
Маппинг не обязательно ограничивать только фиксированными именами, можно использовать и функцию. Например, преобразование имен столбцов в строчные буквы можно выполнить с помощью функции:
In [10]: air_quality_renamed = air_quality_renamed.rename(columns=str.lower)
In [11]: air_quality_renamed.head()
Out[11]:
betr801 fr04014 london westminster london_mg_per_cubic ratio_paris_antwerp
datetime
2019-05-07 02:00:00 NaN NaN 23.0 43.286 NaN
2019-05-07 03:00:00 50.5 25.0 19.0 35.758 0.495050
2019-05-07 04:00:00 45.0 27.7 19.0 35.758 0.615556
2019-05-07 05:00:00 NaN 50.4 16.0 30.112 NaN
2019-05-07 06:00:00 NaN 61.9 NaN NaN NaN
Подробная информация о переименовании меток столбцов или строк приведена в разделе руководства пользователя о переименовании меток.
ЗАПОМНИТЕ
Создавайте новый столбец, записывая результат в DataFrame с новым именем столбца между квадратными скобками
[]
.Операции выполняются поэлементно, не нужно перебирать строки.
Используйте
rename
со словарем или функцией, чтобы переименовать метки строк или имена столбцов.
Руководство пользователя содержит отдельный раздел о добавлении и удалении столбцов.