新增欄位(2)
使用 iterrows() 逐筆走訪 pandas DataFrame 的每筆觀測值,雖然好理解,但效率不高。因為每次迭代都會建立一個新的 pandas Series。
如果你想要透過對另一個欄位呼叫函式來為 DataFrame 新增欄位,搭配 for 迴圈的 iterrows() 並不是首選。你應該改用 apply()。
比較 iterrows() 與 apply() 在 brics DataFrame 中產生相同結果的寫法:
for lab, row in brics.iterrows() :
brics.loc[lab, "name_length"] = len(row["country"])
brics["name_length"] = brics["country"].apply(len)
我們也可以做類似的事,把 country 欄位中的每個名稱呼叫 upper()。不過,upper() 是一個方法,因此需要稍微不同的做法:
本練習屬於課程
Python 中級
練習說明
- 將
for迴圈改成一行,使用.apply(str.upper)。這段呼叫應該得到相同的結果:在cars中新增一個COUNTRY欄位,內容為國家名稱的大寫版本。 - 照慣例,列印
cars,看看你努力的成果。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Import cars data
import pandas as pd
cars = pd.read_csv('cars.csv', index_col = 0)
# Use .apply(str.upper)
for lab, row in cars.iterrows() :
cars.loc[lab, "COUNTRY"] = row["country"].upper()