Tóm lại: Với DataFrame, .shape trả về một tuple gồm số hàng và số cột. Với Series, nó trả về số hàng. Hãy dùng .shape để nhanh chóng kiểm tra kích thước tập dữ liệu của bạn hoặc xác nhận kết quả lọc và chọn. Ngoài ra, nhớ rằng .shape là một thuộc tính, nên bạn không cần dấu ngoặc để truy cập.
Để tự mình chạy dễ dàng toàn bộ mã ví dụ trong hướng dẫn này, bạn có thể tạo một sổ tay DataLabmiễn phí có sẵn Python và chứa toàn bộ mẫu mã.
Nếu bạn có một DataFrame và muốn truy cập hoặc chọn một vài hàng/cột cụ thể từ DataFrame đó, bạn có thể dùng dấu ngoặc vuông hoặc các phương pháp nâng cao khác như loc và iloc.
Chọn cột bằng dấu ngoặc vuông
Giả sử bạn muốn chọn cột country từ DataFrame brics. Để thực hiện, bạn gõ brics rồi đến nhãn cột bên trong dấu ngoặc vuông.
Chọn một cột
country capital area population
BR Brazil Brasilia 8.516 200.40
RU Russia Moscow 17.100 143.50
IN India New Dehli 3.286 1252.00
CH China Beijing 9.597 1357.00
SA South Africa Pretoria 1.221 52.98
brics["country"]
BR Brazil
RU Russia
IN India
CH China
SA South Africa
Name: country, dtype: object
Kiểm tra kiểu của đối tượng
Hãy kiểm tra kiểu của đối tượng được trả về bằng hàm type().
type(brics["country"])
pandas.core.series.Series
Như bạn thấy từ đầu ra trên, đây là một series của pandas! Series có thể được xem như một mảng một chiều có thể gán nhãn, tương tự như DataFrame.
Nếu bạn muốn chọn dữ liệu và giữ nó ở dạng DataFrame, bạn cần dùng dấu ngoặc vuông kép:
brics[["country"]]
BR Brazil
RU Russia
IN India
CH China
SA South Africa
Nếu kiểm tra kiểu của kết quả này, đó là một DataFrame! Tuy nhiên chỉ có một cột.
type(brics[["country"]])
pandas.core.frame.DataFrame
Tìm hiểu thuộc tính .shape
Bây giờ hãy xem thuộc tính .shape. Thuộc tính .shape trong pandas cung cấp cách nhanh chóng để xem cấu trúc của DataFrame hoặc Series. Nó trả về một bộ giá trị (tuple) cho biết số hàng và số cột trong DataFrame, hoặc chỉ số hàng trong Series.
Ví dụ: Dùng .shape với DataFrame
Hãy xem lại DataFrame tên là brics:
import pandas as pd
# Sample DataFrame
data = {
"country": ["Brazil", "Russia", "India", "China", "South Africa"],
"capital": ["Brasilia", "Moscow", "New Delhi", "Beijing", "Pretoria"],
"area": [8.516, 17.1, 3.286, 9.597, 1.221],
"population": [200.4, 143.5, 1252, 1357, 52.98],
}
brics = pd.DataFrame(data, index=["BR", "RU", "IN", "CH", "SA"])
# Check the shape
print(brics.shape)
Đầu ra:
(5, 4)
Điều này cho biết DataFrame brics có 5 hàng và 4 cột.
Ví dụ: Dùng .shape với Series
Khi chọn một cột đơn từ DataFrame, như cột country, kết quả là một Series. Đây là cách .shape hoạt động trong trường hợp đó:
country_series = brics["country"]
print(country_series.shape)
Đầu ra:
(5,)
Ở đây, Series có 5 hàng và không có cột vì Series là cấu trúc một chiều.
Chọn nhiều cột
Bạn có thể mở rộng lệnh này để chọn hai cột. Hãy thử chọn country và capital.
brics[["country", "capital"]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Dehli
CH China Beijing
SA South Africa Pretoria
Nếu để ý kỹ, bạn thực chất đang đặt một danh sách các nhãn cột bên trong một cặp ngoặc vuông khác và nhận được một DataFrame con chỉ chứa các cột country và capital.
Chọn hàng bằng dấu ngoặc vuông
Dấu ngoặc vuông có thể làm nhiều hơn chọn cột. Bạn cũng có thể dùng chúng để lấy các hàng, hay các quan sát, từ một DataFrame.
Ví dụ
Bạn chỉ có thể chọn hàng bằng dấu ngoặc vuông nếu chỉ định một lát cắt (slice), như 0:4. Ngoài ra, ở đây bạn đang dùng chỉ mục nguyên của các hàng, không phải nhãn hàng!
Để lấy hàng thứ hai, ba và bốn của DataFrame brics, chúng ta dùng lát cắt từ 1 đến 4. Hãy nhớ rằng điểm cuối của lát cắt là loại trừ, và chỉ mục bắt đầu từ 0.
brics[1:4]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Delhi 3.286 1252.00
CH China Beijing 9.597 1357.00
Dấu ngoặc vuông này hoạt động, nhưng chỉ cung cấp chức năng hạn chế. Lý tưởng nhất, chúng ta muốn thứ gì đó tương tự mảng 2D của Numpy, nơi bạn cũng dùng dấu ngoặc vuông. Chỉ mục, hoặc lát cắt, trước dấu phẩy là hàng, và lát cắt sau dấu phẩy là cột.
Ví dụ về mảng 2D Numpy:
my_array[rows, columns]
Nếu muốn làm điều tương tự với pandas, bạn cần dùng các hàm loc và iloc.
-
loc: dựa trên nhãn -
iloc: dựa trên vị trí chỉ số nguyên
Hàm loc
loc là kỹ thuật để chọn một phần dữ liệu dựa trên nhãn. Hãy xem DataFrame brics và lấy các hàng cho Nga.
Để làm được, bạn đặt nhãn quan tâm trong dấu ngoặc vuông sau loc.
Chọn hàng
brics.loc["RU"]
country Russia
capital Moscow
area 17.1
population 143.5
Name: RU, dtype: object
Chúng ta nhận được một series của pandas chứa toàn bộ thông tin hàng; tuy nhiên, bất tiện là nó hiển thị trên các dòng khác nhau. Để nhận một DataFrame, chúng ta phải đặt chuỗi RU vào trong một cặp ngoặc nữa. Bạn cũng có thể chọn nhiều hàng cùng lúc. Giả sử bạn muốn thêm Ấn Độ và Trung Quốc. Chỉ cần thêm những nhãn hàng đó vào danh sách.
brics.loc[["RU", "IN", "CH"]]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Delhi 3.286 1252.00
CH China Beijing 9.597 1357.00
Sự khác biệt giữa dùng loc và dấu ngoặc vuông cơ bản là bạn có thể mở rộng lựa chọn bằng một dấu phẩy và chỉ định các cột quan tâm.
Chọn hàng và cột
Hãy mở rộng lệnh trước để chỉ bao gồm các cột country và capital. Chúng ta thêm dấu phẩy và liệt kê các nhãn cột muốn giữ. Phần giao nhau sẽ được trả về.
brics.loc[["RU", "IN", "CH"], ["country", "capital"]]
country capital
RU Russia Moscow
IN India New Delhi
CH China Beijing
Bạn cũng có thể dùng loc để chọn tất cả các hàng nhưng chỉ một số cột nhất định. Chỉ cần thay danh sách đầu tiên chỉ định nhãn hàng bằng dấu hai chấm. Một lát cắt từ đầu đến cuối. Lần này, chúng ta nhận lại toàn bộ các hàng nhưng chỉ hai cột.
Chọn tất cả hàng và các cột cụ thể
brics.loc[:, ["country", "capital"]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Delhi
CH China Beijing
SA South Africa Pretoria
Hàm iloc
Hàm iloc cho phép bạn chia tách (subset) các DataFrame của pandas dựa trên vị trí hoặc chỉ mục của chúng.
Chọn hàng
Hãy dùng cùng dữ liệu và ví dụ tương tự như với loc. Bắt đầu bằng cách lấy hàng cho Nga.
brics.iloc[[1]]
country capital area population
RU Russia Moscow 17.100 143.50
Để lấy các hàng cho Nga, Ấn Độ và Trung Quốc, bạn có thể dùng danh sách chỉ mục 1, 2, 3.
brics.iloc[[1, 2, 3]]
country capital area population
RU Russia Moscow 17.100 143.50
IN India New Delhi 3.286 1252.00
CH China Beijing 9.597 1357.00
Chọn hàng và cột
Tương tự loc, chúng ta cũng có thể chọn cả hàng và cột bằng iloc. Ở đây, chúng ta sẽ chọn các hàng cho Nga, Ấn Độ và Trung Quốc và các cột country và capital.
brics.iloc[[1, 2, 3], [0, 1]]
country capital
RU Russia Moscow
IN India New Delhi
CH China Beijing
Chọn tất cả hàng và các cột cụ thể
Cuối cùng, nếu bạn muốn chọn tất cả các hàng nhưng chỉ giữ các cột country và capital, bạn có thể:
brics.loc[:, [0, 1]]
country capital
BR Brazil Brasilia
RU Russia Moscow
IN India New Delhi
CH China Beijing
SA South Africa Pretoria
Các hàm loc và iloc khá giống nhau. Điểm khác nhau chỉ là cách bạn tham chiếu đến các cột và hàng.
Ví dụ tương tác về chọn một tập con dữ liệu
Trong ví dụ sau, dữ liệu cars được nhập từ các tệp CSV dưới dạng một Pandas DataFrame. Để chỉ chọn cars_per_cap column từ cars, bạn có thể dùng:
cars['cars_per_cap']
cars[['cars_per_cap']]
Phiên bản một ngoặc vuông trả về một Pandas Series; phiên bản ngoặc kép trả về một Pandas DataFrame.
- Bạn sẽ dùng một cặp ngoặc vuông để in cột
countrycủacarsdưới dạng Pandas Series. - Sau đó dùng một cặp ngoặc vuông kép để in cột
countrycủacarsdưới dạng Pandas DataFrame. - Cuối cùng, dùng ngoặc vuông kép để in ra một DataFrame với cả hai cột
countryvàdrives_rightcủacars, theo thứ tự này.
# Import cars data
import pandas as pd
cars = pd.read_csv('cars.csv', index_col = 0)
# Print out country column as Pandas Series
print(cars['country'])
# Print out country column as Pandas DataFrame
print(cars[['country']])
# Print out DataFrame with country and drives_right columns
print(cars[['country', 'drives_right']])
Khi chạy đoạn mã trên, ta thu được kết quả sau:
US United States
AUS Australia
JPN Japan
IN India
RU Russia
MOR Morocco
EG Egypt
Name: country, dtype: object
country
US United States
AUS Australia
JPN Japan
IN India
RU Russia
MOR Morocco
EG Egypt
country drives_right
US United States True
AUS Australia False
JPN Japan False
IN India False
RU Russia True
MOR Morocco True
EG Egypt True
Để tìm hiểu thêm về pandas, vui lòng xem video từ khóa học Intermediate Python của chúng tôi.
Nội dung này được trích từ khóa học Intermediate Python của DataCamp do Hugo Bowne-Anderson biên soạn.