In [1]: import pandas as pd
- Air quality data
在本教程中,使用了关于 \(NO_2\) 的空气质量数据,这些数据由 OpenAQ 提供,并使用了 py-openaq 包。
To raw dataair_quality_no2.csv
数据集提供了测量站 FR04014、BETR801 和 London Westminster 分别在巴黎、安特卫普和伦敦的 \(NO_2\) 值。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\) 浓度。
(如果我们假设温度为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
计算再次是逐元素进行的,因此
/
应用于 每一行的值 。
其他数学运算符 (+
, -
, *
, /
, …) 和逻辑运算符 (<
, >
, ==
, …) 也按元素逐个工作。后者已经在 子集数据教程 中使用,以使用条件表达式过滤表的行。
如果你需要更高级的逻辑,你可以通过 apply()
使用任意 Python 代码。
我想将数据列重命名为 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
关于列或行标签重命名的详细信息在用户指南的 重命名标签 部分提供。
REMEMBER
通过在
[]
中指定新的列名,将输出赋值给 DataFrame 以创建一个新列。操作是按元素进行的,不需要遍历行。
使用
rename
与字典或函数来重命名行标签或列名。
用户指南包含一个关于 列的添加和删除 的单独章节。