In [1]: import pandas as pd
本教程使用的数据:
  • 在本教程中,空气质量数据有关NO2使用,由OpenAQ提供并使用 py-openaq包。数据air_quality_no2.csv集提供NO2 分别位于巴黎、安特卫普和伦敦的测量站FR04014BETR801伦敦威斯敏斯特的值。

    至原始数据
     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
  • 我想表达的是NO2伦敦气象站浓度(单位为mg/m3)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。您不需要使用循环来迭代每一行!

../../_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  ...  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来重命名行标签或列名称。

转至用户指南

用户指南包含有关列添加和删除的单独部分。