In [1]: import pandas as pd
本教程使用的数据:
- 空气质量数据
在本教程中,空气质量数据有关
至原始数据 使用,由OpenAQ提供并使用 py-openaq包。数据air_quality_no2.csv
集提供 分别位于巴黎、安特卫普和伦敦的测量站FR04014、BETR801和伦敦威斯敏斯特的值。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/m3) 。(如果我们假设温度为 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()
.
我想将数据列重命名为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]
转至用户指南
有关重命名标签的用户指南部分提供了有关列或行标签重命名的详细信息。
REMEMBER
通过将输出分配给 DataFrame 来创建一个新列,并在
[]
.操作是按元素进行的,无需循环行。
与字典或函数一起使用
rename
来重命名行标签或列名称。
转至用户指南
用户指南包含有关列添加和删除的单独部分。