In [1]: import pandas as pd
本教學課程使用資料
  • 本教學課程使用 OpenAQ 提供的 \(NO_2\) 空氣品質資料,並使用 py-openaq 套件。 air_quality_no2.csv 資料集提供巴黎、安特衛普和倫敦的測量站 FR04014BETR801London Westminster\(NO_2\) 值。

    至原始資料
    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
  • 我想以 mg/m\(^3\) 表示倫敦測站的 \(NO_2\) 濃度。

    如果我們假設溫度為 25 度 C,壓力為 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() 使用任意 Python 程式碼。

  • 我想將資料欄位重新命名為 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]
使用者指南

有關欄或列標籤重新命名的詳細資訊,請參閱使用者指南部分的 重新命名標籤

請記住

  • 透過將輸出指定給具有新欄位名稱的 DataFrame,在 [] 之間建立新欄位。

  • 運算為逐元素,無需迴圈處理列。

  • 使用 rename 搭配字典或函式來重新命名列標籤或欄位名稱。

使用者指南

使用者指南包含有關 欄位新增和刪除 的獨立部分。