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
如何从现有列创建新列#
我想用 mg/m\(^3\) 表示伦敦站的 \(NO_2\) 浓度。
(如果我们假设温度为 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
和字典或函数来重命名行标签或列名。
用户指南
用户指南中有一节专门介绍 添加和删除列。