In [1]: import pandas as pd
Data used for this tutorial:
  • 在本教程中,空气质量数据关于 \(NO_2\) 由以下人员使用、提供 OpenAQ 并使用 py-openaq 包裹。这个 air_quality_no2.csv 数据集提供 \(NO_2\) 测量站的值 FR04014BETR801伦敦威斯敏斯特 分别在巴黎、安特卫普和伦敦。

    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
    

如何创建从现有列派生的新列?#

../../_images/05_newcolumn_1.svg
  • 我想表达的是 \(NO_2\) 伦敦站的浓度,单位为毫克/米\(^3\)

    ( 如果我们假设温度为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
    

    若要创建新列,请使用 [] 在赋值的左侧用新列名括起来。

备注

完成了这些值的计算 element-wise 。这意味着给定列中的所有值一次都乘以值1.882。您不需要使用循环来迭代每一行!

../../_images/05_newcolumn_2.svg
  • 我想检查巴黎和安特卫普的值的比率,并将结果保存在一个新列中。

    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
    

    计算也是以元素为单位的,因此 / 已应用 对于每行中的值

还有其他数学运算符 (+-, *, /,…) or logical operators (`` < ``>== ,…)工作元素方面。后者已经被用于 subset data tutorial 若要使用条件表达式筛选表中的行,请执行以下操作。

如果需要更高级的逻辑,可以通过以下方式使用任意的Python代码 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 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() 函数可用于行标签和列标签。提供一个字典,其中包含键、当前名称和新名称的值,以更新相应的名称。

映射不应仅限于固定名称,还可以是映射函数。例如,也可以使用函数将列名转换为小写字母:

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
To user guide

上的用户指南部分提供了有关列或行标签重命名的详细信息 renaming labels

REMEMBER

  • 通过将输出分配给DataFrame,并在 []

  • 操作是元素级的,不需要对行进行循环。

  • 使用 rename 具有用于重命名行标签或列名的词典或函数。

To user guide

该用户指南包含关于以下内容的单独部分 column addition and deletion