In [1]: import pandas as pd
本教程使用的数据:
- 空气质素数据
在本教程中,使用了关于NO2的空气质量数据,这些数据由openaq和py-openaq包提供。air_quality_no2.csv
数据集提供了分别位于巴黎、安特卫普和伦敦的 FR04014、 BETR801和伦敦威斯敏斯特测量站的二氧化氮值。
To raw data 原始数据
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/m33表示伦敦车站的二氧化氮浓度
(我们假设温度为25摄氏度,压力为1013百帕,换算系数为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 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。您不需要使用循环来迭代每一行!
我想检查巴黎和安特卫普的值的比率,并将结果保存在新的列中
In [6]: air_quality["ratio_paris_antwerp"] =
...: air_quality["station_paris"] / air_quality["station_antwerp"]
...:
In [7]: air_quality.head()
Out[7]:
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
计算同样是按元素进行的,因此对每一行中的值应用/
。
还有其他数学运算符(+ ,-,* ,/)
或逻辑运算符(< ,> ,= ,...)
。后者已经在子集数据教程subset data tutorial中用于使用条件表达式过滤表中的行。
- 我想将数据列重命名为 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 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
The rename()
function can be used for both row labels and column labels. Provide a dictionary with the keys the current names and the values the new names to update the corresponding names.
rename()
函数可用于行标签和列标签。提供一个包含键、当前名称和新名称值的字典,以更新相应的名称。
映射不应该仅限于固定名称,也可以是一个映射函数。例如,将列名转换为小写字母也可以使用一个函数来完成:
In [10]: air_quality_renamed = air_quality_renamed.rename(columns=str.lower)
In [11]: air_quality_renamed.head()
Out[11]:
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
关于重命名标签的用户指南部分提供了有关列或行标签重命名renaming labels.的详细信息。
记住
- 方法
[]
之间使用新的列名将输出分配给 DataFrame,从而创建一个新列。 - 操作是按元素进行的,不需要循环遍历行。
- 使用
rename
名字典或函数来重命名行标签或列名。
使用指南column addition and deletion.
用户指南包含一个单独的栏添加和删除部分。