Xử lý dữ liệu với Pandas trong Python
Pandas là một thư viện Python cung cấp các cấu trúc dữ liệu nhanh, mạnh mẽ, linh hoạt, và mang hàm ý. Tên thư viện được bắt nguồn từ panel data (bảng dữ liệu). Pandas được thiết kế để làm việc dễ dàng và trực quan với dữ liệu có cấu trúc (dạng bảng, đa chiều, có tiềm năng không đồng nhất) và dữ liệu chuỗi thời gian.
Mục tiêu của Pandas là trở thành khối căn bản (building block) cấp cao cơ bản cho công việc thực tế, phân tích dữ liệu thế giới thật trong Python, và rộng hơn là trở thành công cụ thao tác / phân tích mã nguồn mở mạnh mẽ và linh hoạt nhất có sẵn trong bất kỳ loại ngôn ngữ lập trình nào.
Vì sao bạn nên chọn Pandas?
Pandas rất phù hợp với nhiều loại dữ liệu khác nhau:
- Dữ liệu dạng bảng với các cột được nhập không đồng nhất, như trong bảng SQL hoặc bảng tính Excel.
- Dữ liệu chuỗi thời gian theo thứ tự và không có thứ tự (không nhất thiết phải có tần số cố định).
- Dữ liệu ma trận tùy ý (được nhập đồng nhất hoặc không đồng nhất) với nhãn hàng và cột.
- Bất kỳ hình thức khác của các bộ dữ liệu quan sát / thống kê. Dữ liệu thực sự không cần phải được dán nhãn vào cấu trúc dữ liệu Pandas.
- Pandas được xây dựng dựa trên NumPy. Hai cấu trúc dữ liệu chính của Pandas là Series (1 chiều) và DataFrame (2 chiều) xử lý được phần lớn các trường hợp điển hình trong tài chính, thống kê, khoa học xã hội và nhiều lĩnh vực kỹ thuật.
Ưu điểm của Pandas
- Dễ dàng xử lý dữ liệu đã mất mát, được biểu thị dưới dạng
NaN
, trong dữ liệu dấu phẩy động cũng như dấu phẩy tĩnh theo ý người dùng mong muốn: bỏ qua hoặc chuyển sang 0. - Khả năng thay đổi kích thước: các cột có thể được chèn và xóa khởi DataFrame và các đối tượng chiều cao hơn.
- Căn chỉnh dữ liệu tự động và rõ ràng: các đối tượng có thể được căn chỉnh rõ ràng với một bộ nhãn hoặc người dùng chỉ cần bỏ qua các nhãn và để Series, DataFrame, v.v tự động căn chỉnh dữ liệu của bạn trong các tính toán.
- Chức năng Group by mạnh mẽ, linh hoạt để thực hiện các hoạt động kết hợp phân tách áp dụng trên các tập dữ liệu, cho cả dữ liệu tổng hợp và chuyển đổi.
- Dễ dàng chuyển đổi dữ liệu rời rạc (ragged), chỉ mục khác nhau (differently-indexed) trong các cấu trúc dữ liệu khác của Python và NumPy thành các đổi tượng DataFrame.
- Cắt lát (clicing) thông minh dựa trên nhãn, lập chỉ mục ưu thích (fancy indexing) và tập hợp lại (subsetting) các tập dữ liệu lớn.
- Gộp (merging) và nối (joining) các tập dữ liệu trực quan.
- Linh hoạt trong định hình lại (reshaping) và xoay (pivoting) các tập dữ liệu.
- Dán nhãn phân cấp (hierarchical) của các trục (có thể có nhiều nhãn trên nhiều đánh dấu).
- Các công cụ IO mạnh mẽ để tải dữ liệu từ các tệp phẳng (flat file) như CSV và delimited, tệp Excel, cơ sở dữ liệu và lưu / tải dữ liệu từ định dạng HDF5 cực nhanh.
- Chức năng theo chuỗi thời gian (time series) cụ thể: tạo phạm vi ngày và chuyển đổi tần số, thống kê cửa sổ di chuyển, dịch chuyển ngày và độ trễ.
- Tích hợp tốt với các thư viện khác của Python như SciPy, Matplotlib, Plotly, v.v.
- Hiệu suất tốt.
Cài đặt thư viện Pandas
- Sử dụng pip và gõ lệnh:
pip install pandas
- Hoặc bằng Anaconda, dùng lệnh:
conda install pandas
Để tìm các cách cài đặt Pandas khác bạn có thể xem tại ĐÂY.
Lưu ý: Bạn cần cài đặt thư viện NumPy trước (nếu bạn cài đặt bằng Anaconda thì NumPy đã có sẵn).
Khai báo thư viện Pandas
import pandas as pd
Bạn không nên thay đổi từ pd thành từ khác vì các tài liệu hướng dẫn đều ngầm quy ước như vậy.
Thao tác với cấu trúc dữ liệu cơ bản
Pandas có 2 cấu trúc dữ liệu cơ bản là:
- Series (1 chiều)
- DataFrame (2 chiều)
Panel (3 chiều) từng là một cấu trúc dữ liệu trong pandas trước khi bị gỡ bỏ từ phiên bản 0.25.
1. Series
Series([data, index, dtype, name, copy,...])
Series là mảng một chiều như như mảng NumPy, hay như một cột của một bảng, nhưng nó bao gồm thêm một bảng đánh label. Series có thể được khởi tạo thông qua NumPy, kiểu Dict hoặc các dữ liệu vô hướng bình thường. Series có nhiều thuộc tính như index, array, value, dtype,v.v. Bạn có thể thực hiện chuyển đổi Series sang dạng dtype xác định, tạo bảng copy, trả về dạng bool của một thành phần, chuyển Series từ DatetimeIndex sang PeriodIndex, v.v.
Một số ví dụ về thao tác với Series:
Tạo Series
Ví dụ 1: Không truyền index
import pandas as pd S = pd.Series([0,1,2,3]) print(s)
Output:
0 0 1 1 2 2 3 3 dtype: int64
Pandas sẽ mặc định truyền index từ 0 đến len(data)-1
.
Ví dụ 2: Có truyền index
import pandas as pd S = pd.Series([0,1,2,3], index = ["a","b","c","d"]) print(s)
Output:
a 0 b 1 c 2 d 3 dtype: int64
Ví dụ 3: Tạo Series từ dict
import pandas as pd data = {'a' : -1.3, 'b' : 11.7, 'd' : 2.0, 'f' : 10, 'g' : 5} ser = pd.Series(data,index = ['a','c','b','d','e','f']) print(ser)
Output:
a -1.3 c NaN b 11.7 d 2.0 e NaN f 10.0 dtype: float64
Chúng ta tạo dict có index a,b,d,f,g
. Sau đó tạo Series từ dict data này nhưng các index c
và e
không có trong dict nên dữ liệu tại các index này bị thiếu (missing data). Pandas hiển thị NaN
để báo các dữ liệu này bị trống.