In [1]: import pandas as pd
本教學課程使用資料
- 空氣品質資料
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/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。您不需要使用迴圈來逐一反覆處理每列!
我想檢查巴黎與安特衛普中數值的比率,並將結果儲存在新欄位中。
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
搭配字典或函式來重新命名列標籤或欄位名稱。
使用者指南
使用者指南包含有關 欄位新增和刪除 的獨立部分。