如何从现有列派生新列
来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
笔记托管:https://gitee.com/DingJiaxiong/machine-learning-study
文章目录
- 如何从现有列派生新列
- 导包
- 数据集准备
- 【1】如何创建从现有列派生的新列
- 【小结】
导包
import pandas as pd
数据集准备
同样使用之前用过的空气质量数据
air_quality = pd.read_csv("air_quality_no2.csv", index_col=0, parse_dates=True)
air_quality.head()
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 |
【1】如何创建从现有列派生的新列
我想表达 N O 2 NO_2 NO2 伦敦车站的浓度,单位为 m g / m 3 mg/m^3 mg/m3.
【(如果我们假设温度为 25 摄氏度,压力为 1013 hPa,则转换因子为 1.882)】举个栗子都这么严谨,这就是官方文档
air_quality["london_mg_per_cubic"] = air_quality['station_london'] * 1.882
air_quality.head()
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。您不需要使用循环来迭代每一行!
我想检查巴黎与安特卫普的值比率,并将结果保存在新列中。
air_quality["ratio_paris_antwerp"] = (air_quality["station_paris"] / air_quality["station_antwerp"])
air_quality.head()
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 使用的相应工作站标识符.
air_quality_renamed = air_quality.rename(
columns={
"station_antwerp": "BETR801",
"station_paris": "FR04014",
"station_london": "London Westminster",
}
)
air_quality_renamed.head()
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() 函数可用于行标签和列标签。提供一个字典,其中包含当前名称的键和新名称的值以更新相应的名称。
映射不应仅限于固定名称,还可以是映射函数。例如,也可以使用函数将列名转换为小写字母:
air_quality_renamed = air_quality_renamed.rename(columns=str.lower)
air_quality_renamed.head()
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或函数重命名来重命名行标签或列名称。