Hướng dẫn thao tác dữ liệu hiệu quả với pandas

Các khái niệm cốt lõi

1. Lớp DataFrame và các phương thức thông dụng

DataFrame là cấu trúc dữ liệu trung tâm trong pandas. Dưới đây là các phương thức hay dùng nhất:

# Thuộc tính cơ bản
khung_du_lieu.index          # Lấy chỉ số hàng
khung_du_lieu.columns        # Lấy tên cột
khung_du_lieu.info()         # Thống kê tổng quan
khung_du_lieu.values         # Chuyển đổi sang mảng NumPy

# Truy cập và lặp dữ liệu
khung_du_lieu.head(n=5)      # Xem n hàng đầu tiên
khung_du_lieu.tail(n=5)      # Xem n hàng cuối cùng
khung_du_lieu.loc[row, col]  # Truy cập theo nhãn
khung_du_lieu.iloc[i, j]     # Truy cập theo vị trí số

# Chèn và lọc
khung_du_lieu.insert(vi_tri, ten_cot, gia_tri)  # Chèn cột mới
khung_du_lieu.query(bieu_thuc)                  # Lọc với biểu thức

# Áp dụng hàm và nhóm dữ liệu
khung_du_lieu.apply(ham_xu_ly, axis=0)          # Áp dụng hàm theo trục
khung_du_lieu.applymap(ham_tung_phan_tu)        # Áp dụng hàm cho từng phần tử
khung_du_lieu.groupby(nhom_theo)                # Nhóm dữ liệu

2. Xóa dữ liệu

Để loại bỏ các hàng không cần thiết:

# Xóa hàng theo điều kiện
bang_moi = bang_cu.drop(bang_cu[bang_cu['tuoi'] < 18].index)

3. Lọc dữ liệu theo điều kiện

Sử dụng phương thức isin() để kiểm tra giá trị trong tập hợp:

# Lọc những dòng có tên thuộc danh sách cho trước
ket_qua = du_lieu[du_lieu['ho_ten'].isin(['An', 'Mai', 'Duc'])]

4. Sắp xếp dữ liệu

Sắp xếp theo một hoặc nhiều cột:

# Sắp xếp giảm dần theo cột 'diem_so'
ket_qua_sap_xep = sinh_vien.sort_values(by='diem_so', ascending=False)

5. Tạo DataFrame rỗng và thêm dữ liệu từng bước

Khi cần xây dựng dữ liệu từng phần:

# Khởi tạo DataFrame trống với cột xác định
bang_trong = pd.DataFrame(columns=['ma_so', 'ten_san_pham'])

# Thêm từng dòng dữ liệu
bang_trong = bang_trong.append(
    {'ma_so': 'SP001', 'ten_san_pham': 'Laptop'},
    ignore_index=True
)

6. Chuyển đổi dữ liệu phân loại

Hai phương pháp phổ biến:

Mã hóa nhãn (Label Encoding)

from sklearn.preprocessing import LabelEncoder

bo_ma = LabelEncoder().fit(tap_du_lieu["danh_muc"])
tap_du_lieu["danh_muc_ma"] = bo_ma.transform(tap_du_lieu["danh_muc"])

Mã hóa one-hot

# Tạo cột độc lập cho mỗi loại giá trị
bang_onehot = pd.get_dummies(
    tap_du_lieu['thanh_pho'], 
    prefix='tp'
)

7. Tham số axis trong pandas

axis=0 thao tác theo chiều dọc (các hàng), axis=1 thao tác theo chiều ngang (các cột).

8. Các loại kết nối (join) dữ liệu

  • inner: Chỉ giữ lại các hàng khớp ở cả hai bảng
  • outer: Giữ tất cả hàng, điền NaN nếu không khớp
  • left: Giữ toàn bộ hàng bên trái, chỉ hàng khớp bên phải
  • right: Giữ toàn bộ hàng bên phải, chỉ hàng khớp bên trái

Xử lý ngày tháng

Lấy thông tin thứ trong tuần:

import datetime

ngay_hien_tai = datetime.datetime.now()
thu_trong_tuan = ngay_hien_tai.weekday()  # Trả về 0-6 (Thứ 2-Chủ nhật)

So sánh dữ liệu

Thao tác Phương thức Mô tả ứng dụng
Đối chiếu chi tiết pd.compare(du_lieu_khac) So sánh từng ô và hiển thị khác biệt
Kiểm tra bằng nhau DataFrame.equals(du_lieu_khac) Kiểm tra toàn bộ DataFrame có giống nhau không
Căn chỉnh dữ liệu DataFrame.align(du_lieu_khac) Đồng bộ hàng/cột giữa hai DataFrame

Thẻ: Pandas dataframe sklearn LabelEncoder one-hot-encoding

Đăng vào ngày 31 tháng 8 lúc 16:07