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
函数并结合字典或函数来重命名行标签或列名。
到用户指南
用户指南中包含关于列的添加和删除的单独章节。