Thêm cột (2)
Dùng iterrows() để lặp qua từng quan sát của một Pandas DataFrame thì dễ hiểu, nhưng không hiệu quả. Ở mỗi vòng lặp, bạn đang tạo ra một Pandas Series mới.
Nếu bạn muốn thêm một cột vào DataFrame bằng cách gọi một hàm trên một cột khác, thì kết hợp iterrows() với vòng lặp for không phải là cách tối ưu. Thay vào đó, bạn nên dùng apply().
So sánh phiên bản dùng iterrows() với phiên bản dùng apply() để thu được cùng kết quả trong DataFrame brics:
for lab, row in brics.iterrows() :
brics.loc[lab, "name_length"] = len(row["country"])
brics["name_length"] = brics["country"].apply(len)
Ta có thể làm điều tương tự để gọi phương thức upper() trên mọi tên trong cột country. Tuy nhiên, upper() là một method, vì vậy chúng ta sẽ cần một cách tiếp cận hơi khác:
Bài tập này là một phần của khóa học
Python nâng cao
Hướng dẫn bài tập
- Thay vòng lặp
forbằng một dòng dùng.apply(str.upper). Lệnh gọi này phải cho cùng kết quả: một cộtCOUNTRYđược thêm vàocars, chứa phiên bản viết hoa của tên quốc gia. - Như thường lệ, in
carsra để xem thành quả công sức của bạn
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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()