In [1]: import pandas as pd
本教程使用的数据
- 空气质量数据
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\) 浓度表示为 mg/m\(^3\)。
(如果假设温度为 25 摄氏度,压力为 1013 hPa,转换因子为 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 ... london_mg_per_cubic datetime ... 2019-05-07 02:00:00 NaN ... 43.286 2019-05-07 03:00:00 50.5 ... 35.758 2019-05-07 04:00:00 45.0 ... 35.758 2019-05-07 05:00:00 NaN ... 30.112 2019-05-07 06:00:00 NaN ... NaN [5 rows x 4 columns]
要创建新列,请在赋值语句的左侧使用
[]
括号,并在其中指定新列名。
注意
值的计算是逐元素进行的。这意味着给定列中的所有值都会一次性乘以 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 ... ratio_paris_antwerp datetime ... 2019-05-07 02:00:00 NaN ... NaN 2019-05-07 03:00:00 50.5 ... 0.495050 2019-05-07 04:00:00 45.0 ... 0.615556 2019-05-07 05:00:00 NaN ... NaN 2019-05-07 06:00:00 NaN ... NaN [5 rows x 5 columns]
计算同样是逐元素的,因此
/
运算会应用于每一行的值。
其他数学运算符 (+
, -
, *
, /
,…) 或逻辑运算符 (<
, >
, ==
,…) 也都是逐元素工作的。后者已在子集数据教程中使用,通过条件表达式过滤表格行。
如果需要更复杂的逻辑,可以通过 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_mg_per_cubic ratio_paris_antwerp datetime ... 2019-05-07 02:00:00 NaN NaN ... 43.286 NaN 2019-05-07 03:00:00 50.5 25.0 ... 35.758 0.495050 2019-05-07 04:00:00 45.0 27.7 ... 35.758 0.615556 2019-05-07 05:00:00 NaN 50.4 ... 30.112 NaN 2019-05-07 06:00:00 NaN 61.9 ... NaN NaN [5 rows x 5 columns]
rename()
函数可用于行标签和列标签。提供一个字典,其中键是当前名称,值是新名称,以更新相应的名称。
映射不应仅限于固定名称,也可以是一个映射函数。例如,将列名转换为小写字母也可以通过函数完成
In [10]: air_quality_renamed = air_quality_renamed.rename(columns=str.lower)
In [11]: air_quality_renamed.head()
Out[11]:
betr801 fr04014 ... london_mg_per_cubic ratio_paris_antwerp
datetime ...
2019-05-07 02:00:00 NaN NaN ... 43.286 NaN
2019-05-07 03:00:00 50.5 25.0 ... 35.758 0.495050
2019-05-07 04:00:00 45.0 27.7 ... 35.758 0.615556
2019-05-07 05:00:00 NaN 50.4 ... 30.112 NaN
2019-05-07 06:00:00 NaN 61.9 ... NaN NaN
[5 rows x 5 columns]
到用户指南
用户指南中关于重命名标签的部分提供了列或行标签重命名的详细信息。
记住
通过将输出赋值给 DataFrame,并在
[]
中指定新列名来创建新列。操作是逐元素的,无需循环遍历行。
使用
rename
函数及字典或函数来重命名行标签或列名。
到用户指南
用户指南中有一个独立的部分,介绍了列的添加和删除。