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结合字典或函数来重命名行标签或列名。
用户指南
用户指南包含一个关于列的添加和删除的独立部分。