pandas là thư viện phân tích dữ liệu số một của Python. Bài này dạy đọc dữ liệu, lọc, nhóm, tổng hợp, làm sạch và vẽ biểu đồ, thay thế nhiều thao tác Excel lặp đi lặp lại.
- Hiểu Series và DataFrame
- Đọc CSV/Excel, xem nhanh dữ liệu
- Lọc, sắp xếp, tạo cột, groupby
- Làm sạch dữ liệu và vẽ biểu đồ
- DataFrame
- Bảng dữ liệu hai chiều có tên cột.
- Series
- Một cột dữ liệu có chỉ mục.
- groupby
- Nhóm theo cột rồi tổng hợp (như PivotTable).
- NaN
- Giá trị bị thiếu.
Khái niệm và lý thuyết
DataFrame giống một trang tính: mỗi cột một kiểu dữ liệu, mỗi dòng một bản ghi. Khác Excel, mọi bước xử lý được ghi lại thành mã: lần sau chỉ cần chạy lại khi có dữ liệu mới. pandas thao tác theo cột (vector hóa), nhanh hơn nhiều so với vòng for duyệt từng dòng.
pandas 3.x dùng kiểu chuỗi mới và cơ chế copy-on-write mặc định, giúp tránh cảnh báo SettingWithCopy quen thuộc ở các phiên bản trước. Với dữ liệu rất lớn có thể tìm hiểu thêm Polars.
Đọc và xem dữ liệu
uv add pandas openpyxl matplotlibimport pandas as pd
df = pd.read_csv("diem.csv") # hoặc pd.read_excel("diem.xlsx")
df.head() # 5 dòng đầu
df.info() # kiểu dữ liệu, số giá trị thiếu
df.describe() # thống kê: trung bình, min, max...Lọc, sắp xếp, cột mới
gioi = df[df["diem"] >= 8.5]
k66 = df.query("lop == 'K66 Tin' and diem >= 5")
df["xep_loai"] = pd.cut(df["diem"], bins=[0, 5, 7, 8.5, 10],
labels=["Yếu", "TB", "Khá", "Giỏi"], right=False, include_lowest=True)
df = df.sort_values(["lop", "diem"], ascending=[True, False])Nhóm và tổng hợp
bang = df.groupby("lop").agg(si_so=("ma", "count"),
diem_tb=("diem", "mean"),
cao_nhat=("diem", "max")).round(2)
pivot = df.pivot_table(index="lop", columns="xep_loai", values="ma",
aggfunc="count", fill_value=0, observed=False)
bang.to_excel("tong_hop.xlsx")Làm sạch dữ liệu
df["ho_ten"] = df["ho_ten"].str.strip().str.title()
df = df.drop_duplicates(subset="ma")
df["diem"] = pd.to_numeric(df["diem"], errors="coerce") # chữ -> NaN
df["diem"] = df["diem"].fillna(0)
df["ngay_sinh"] = pd.to_datetime(df["ngay_sinh"], dayfirst=True)Biểu đồ
import matplotlib.pyplot as plt
bang["diem_tb"].plot(kind="bar", title="Điểm trung bình theo lớp")
plt.tight_layout(); plt.savefig("bieu_do.png", dpi=150)Dùng Jupyter Notebook (hoặc notebook trong VS Code, Google Colab) để xem kết quả từng bước khi phân tích dữ liệu.
Tránh duyệt DataFrame bằng vòng for với iterrows: chậm hàng trăm lần. Hãy dùng phép toán trên cả cột.
- Đọc tệp điểm, tìm 10 sinh viên điểm cao nhất mỗi lớp.
- Tạo bảng tổng hợp số lượng theo xếp loại cho từng lớp.
- Làm sạch tệp có tên thừa khoảng trắng, mã trùng, điểm ghi “vắng”.
- Vẽ biểu đồ cột và biểu đồ tròn tỉ lệ xếp loại, lưu PNG.
- DataFrame là bảng, Series là cột.
- Lọc bằng điều kiện hoặc query; tạo cột bằng phép toán vector.
- groupby/pivot_table thay PivotTable.
- Làm sạch trước, phân tích sau; vẽ bằng matplotlib.