
pandas là gì? DataFrame và 10 dòng code đầu (pandas 3)
AIDev TeamTham vấn chuyên môn: Nguyễn Việt Chung
Đăng 11 phút đọc3 lượt xem
Mục lục · 18
pandas là gì? Đó là library Python để đọc, lọc, gom nhóm và tính toán trên dữ liệu dạng bảng, giống một sheet Excel nhưng điều khiển bằng code. Bài giải thích DataFrame và Series, chạy 10 dòng code đầu tiên trên 6.000 đơn hàng mẫu rồi chỉ ra ba chỗ pandas 3 khác pandas 2.
pandas là một library (thư viện code viết sẵn) của Python dùng để làm việc với dữ liệu dạng bảng: đọc file CSV hay Excel, lọc dòng, cộng theo nhóm, ghép bảng rồi ghi kết quả ra file. Bạn có thể hình dung pandas như một sheet Excel mà mọi thao tác đều viết bằng code, nên chạy lại được bao nhiêu lần cũng ra cùng một kết quả. Học phân tích dữ liệu hay AI bằng Python thì sớm muộn bạn cũng phải dùng nó hằng ngày.
Mấy điều cần nắm trước khi đọc tiếp:
Hai kiểu dữ liệu chính của pandas là DataFrame (cả bảng, có dòng và cột) và Series (một cột).
Bản mới nhất là pandas 3.1.1, ra ngày 04/11/2026; code trong bài chạy trên 3.1.0, bản ra ngày 22/10/2026. Lệnh
pip install pandascài kèm NumPy, library tính toán số mà pandas dựa vào.10 dòng code trong bài đọc 6.000 đơn hàng của một cửa hàng mẫu, lọc đơn hoàn tất và cộng doanh thu theo kênh bán.
Code cũ viết cho pandas 2 có thể chạy ra kết quả khác trên pandas 3. Mình chạy cùng một file trên cả hai bản để chỉ ra chỗ khác.
pandas là gì và dùng để làm gì?
pandas bắt đầu được viết năm 2008 tại một quỹ đầu tư, được mở mã nguồn cuối năm 2009 và từ năm 2015 là dự án được tổ chức phi lợi nhuận NumFOCUS bảo trợ, theo trang giới thiệu của pandas.
Người ta dùng pandas cho những việc lặp đi lặp lại trên bảng dữ liệu:
gộp file bán hàng nhiều tháng thành một bảng và làm báo cáo;
làm sạch dữ liệu: bỏ dòng trùng, điền ô trống, đổi cột chữ sang số;
tính tổng, trung bình theo nhóm, giống PivotTable trong Excel;
chuẩn bị dữ liệu cho machine learning trước khi đưa vào model.
pandas không dựng dashboard, không thay cơ sở dữ liệu và không xử lý được dữ liệu lớn hơn RAM của máy. Những việc đó cần công cụ khác, mình kể cụ thể ở mục "Khi nào không nên dùng pandas" cuối bài.
DataFrame và Series khác nhau thế nào?
DataFrame là cả bảng, Series là một cột của bảng đó. Mỗi DataFrame có index (nhãn của từng dòng, mặc định là số 0, 1, 2…) và tên cột. Khi bạn lấy một cột bằng df["kenh"], pandas trả về Series. Khi lấy nhiều cột bằng df[["kenh", "doanh_thu"]] (chú ý hai lớp ngoặc vuông), pandas trả về một DataFrame nhỏ hơn.
Khái niệm pandas | Tương ứng trong Excel | Ví dụ trong bài |
|---|---|---|
DataFrame | một sheet |
|
Series | một cột |
|
index | số thứ tự dòng bên trái | 0 đến 5.999 |
dtype (kiểu dữ liệu của cột) | định dạng ô (số, chữ, ngày) |
|
| PivotTable | cộng doanh thu theo kênh |
Mình chạy một script nhỏ để in kiểu của df, của một cột và của hai cột, đếm số đơn theo kênh và xem thống kê nhanh của cột doanh thu:

Dòng max của describe() cho thấy một đơn có doanh thu gần 2 tỷ đồng, trong khi trung vị (đơn đứng giữa khi xếp từ nhỏ đến lớn) chỉ 929.000 đồng. Mình đã kiểm tra: đây là một đơn sỉ, số lượng và đơn giá đều đúng. Bài dự án Data Analyst mẫu kể cách mình kiểm tra đơn này trước khi quyết định giữ hay bỏ.
Cài pandas bằng lệnh nào?
Bạn cần Python từ 3.11 trở lên, rồi chạy pip install pandas trong một virtual environment (môi trường Python riêng cho từng thư mục làm việc):
python3 -m venv .venv # Windows: py -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install pandas
python -c "import pandas, numpy; print(pandas.__version__, numpy.__version__)"
Trên máy ảo Ubuntu 24.04 của AIDev Cloud, pip tải pandas 3.1.0 (12,0 MB) và kéo theo NumPy 2.5.4 (16,7 MB) cùng ba package nhỏ:

Ubuntu 24.04 mặc định chưa cài gói python3-venv, nên lệnh tạo venv đầu tiên báo ensurepip is not available. Mình chạy apt-get install python3.12-venv rồi tạo lại là được. Nếu bạn dùng Windows và gặp lỗi No module named pandas sau khi cài, bài cài pandas và sửa lỗi No module named pandas có đủ sáu trường hợp mình đã tái hiện.
Viết 10 dòng code pandas đầu tiên
Dữ liệu trong bài là 6.000 đơn hàng năm 2025 và nửa đầu 2026 của "Tiệm Mây", một cửa hàng mô phỏng dùng trong khóa Phân tích dữ liệu với Python của AIDev. File để công khai ở lab.aidev.edu.vn/k2, nên read_csv đọc thẳng từ đường link mà không cần tải về trước. Đây là toàn bộ file muoi_dong.py:
import pandas as pd
df = pd.read_csv("https://lab.aidev.edu.vn/k2/du-lieu/don_hang_sach.csv")
print(df.shape)
print(df.head())
df.info()
xong = df[df["trang_thai"] == "Hoàn tất"]
print(len(xong), "đơn hoàn tất")
theo_kenh = xong.groupby("kenh")["doanh_thu"].sum().sort_values(ascending=False)
print(theo_kenh)
theo_kenh.to_csv("doanh_thu_theo_kenh.csv")
Từng dòng làm một việc:
import pandas as pdnạp library và đặt tên ngắnpd, cách viết gần như ai cũng dùng.pd.read_csvđọc file CSV thành DataFramedf.df.shapecho biết bảng có bao nhiêu dòng, bao nhiêu cột.df.head()in 5 dòng đầu để xem dữ liệu trông thế nào.df.info()liệt kê từng cột, số ô có giá trị và kiểu dữ liệu.df[df["trang_thai"] == "Hoàn tất"]giữ lại các dòng có trạng thái "Hoàn tất". Phần trong ngoặc tạo một Series True/False, pandas chỉ giữ dòng ứng với True.len(xong)đếm số đơn còn lại sau khi lọc.groupby("kenh")["doanh_thu"].sum()gom theo kênh rồi cộng doanh thu,sort_valuesxếp từ cao xuống thấp.print(theo_kenh)in kết quả.to_csvghi kết quả ra file để mở bằng Excel.
Kết quả khi chạy trên máy AIDev Cloud:

Trong 6.000 đơn có 5.129 đơn ở trạng thái hoàn tất. Website mang về nhiều tiền nhất với 6,28 tỷ đồng, nhưng con số này đã gồm cả đơn sỉ gần 2 tỷ ở mục trước. Khi tháng sau có file mới, bạn chỉ sửa đường dẫn rồi chạy lại đúng file này.
Cột Dtype trong phần info() có 9 cột kiểu str và 4 cột kiểu int64. Kiểu str là điểm mới của pandas 3, mục sau giải thích.
pandas 3 khác pandas 2 ở đâu?
pandas 3.0.0 ra ngày 21/01/2026, theo ghi chú phát hành của pandas. Phần lớn tutorial trên mạng vẫn viết cho pandas 2, nên mình tạo hai virtual environment trên cùng máy, một cài pandas 2.3.3 (bản cuối của nhánh 2) và một cài pandas 3.1.0, rồi chạy cùng một file. File này đọc don_hang_sach.csv đã tải từ đường link ở mục trên về cùng thư mục:
import pandas as pd
print("pandas", pd.__version__)
df = pd.read_csv("don_hang_sach.csv")
print("kiểu cột kenh:", df["kenh"].dtype)
truoc = df["doanh_thu"].sum()
df[df["kenh"] == "App"]["doanh_thu"] = 0 # gán qua hai lần chọn liên tiếp
print("tổng doanh thu không đổi?", df["doanh_thu"].sum() == truoc)
dau = df.head(3)
dau.loc[0, "so_luong"] = 99 # sửa bảng con
print("bảng gốc dòng 0 so_luong =", df.loc[0, "so_luong"])

Điểm so sánh | pandas 2.3.3 | pandas 3.1.0 |
|---|---|---|
Kiểu của cột chữ |
|
|
Gán | cảnh báo | cảnh báo |
Sửa bảng con lấy từ | bảng gốc đổi theo, | bảng gốc giữ nguyên, |
Dòng thứ ba của bảng là chỗ dễ gây lỗi khó thấy nhất. Ở pandas 2.3.3, df.head(3) trả về một view (bảng con dùng chung bộ nhớ với bảng gốc), nên sửa dau thì df cũng đổi theo mà không có cảnh báo nào. pandas 3 bật Copy-on-Write: mọi bảng con hành xử như một bản sao riêng, sửa bảng con không bao giờ đụng tới bảng gốc.
Khi muốn sửa bảng gốc, bạn viết một lần .loc duy nhất, ví dụ df.loc[df["kenh"] == "App", "doanh_thu"] = 0. Cách viết này đúng trên cả hai bản. Kiểu str cũng đổi một thói quen cũ: code kiểm tra df["kenh"].dtype == object sẽ ra False trên pandas 3.
pandas chạy nhanh cỡ nào?
Mình đo bốn việc trên máy ảo AIDev Cloud (CPU Intel Xeon E5-2696 v4, 25 vCPU), mỗi việc chạy 5 lần và lấy trung vị:

Việc | Thời gian (trung vị 5 lần) |
|---|---|
| 0,378 giây |
| 0,009 giây |
600.000 dòng: đọc, lọc, | 0,679 giây |
600.000 dòng: cùng phép tính bằng module | 2,477 giây |
Đọc từ đường link lâu gấp hơn 40 lần đọc file trên ổ đĩa, gần hết thời gian là chờ mạng. Nếu chạy một notebook Jupyter nhiều lần, bạn nên tải file về một lần rồi đọc từ ổ đĩa. Với 600.000 dòng (mình chép lặp bảng 6.000 đơn 100 lần), pandas nhanh hơn vòng for viết tay khoảng 3,6 lần và hai cách ra cùng con số. Mỗi cột số trong DataFrame thật ra được lưu bằng một mảng NumPy. Bài NumPy là gì so list với mảng NumPy bằng số đo ở bốn cỡ dữ liệu.
Một chi tiết nhỏ về bộ nhớ: df.info() báo 609,5 KB, nhưng df.memory_usage(deep=True) báo 3.544 KB. info() mặc định không đếm phần chữ nằm trong các cột str. Khi cần biết bảng chiếm bao nhiêu RAM thật, hãy dùng deep=True.
Lỗi mình gặp khi mới dùng pandas
Gõ sai tên cột: KeyError
Tên cột phân biệt hoa thường. Cột trong file là kenh, gõ df["Kenh"] thì pandas báo:
KeyError: 'Kenh'

Cách sửa: in df.columns ra xem tên cột chính xác. File CSV xuất từ phần mềm khác hay có khoảng trắng ở đầu hoặc cuối tên cột, khi đó dòng thứ hai dưới đây sẽ bỏ khoảng trắng thừa:
print(df.columns.tolist())
df.columns = df.columns.str.strip()
Đặt tên file là pandas.py
Lúc thử nhanh, mình chép script thành file pandas.py và chạy thì gặp lỗi:
AttributeError: partially initialized module 'pandas' has no attribute 'read_csv' (most likely due to a circular import)

Khi gặp lệnh import, Python tìm module (file code được nạp vào) trong thư mục chứa script trước, nên import pandas nạp lại chính file pandas.py của bạn thay vì library pandas. Cách sửa là đổi tên file (ví dụ thu_pandas.py) và xóa thư mục __pycache__ nếu có. Tên numpy.py, csv.py cũng gây lỗi tương tự.
Khi nào không nên dùng pandas?
Dữ liệu lớn hơn RAM của máy. pandas nạp cả bảng vào bộ nhớ, và như số đo ở mục tốc độ, 6.000 dòng đã chiếm khoảng 3,5 MB. Với hàng chục GB dữ liệu, bạn nên tính trong cơ sở dữ liệu bằng SQL rồi chỉ đưa kết quả vào pandas.
Bảng tính dùng một lần, vài trăm dòng, người nhận cần sửa công thức. Excel làm nhanh hơn việc ngồi viết code.
Bạn cần một trang báo cáo nhiều người cùng xem và tự lọc. Power BI hay Looker Studio hợp hơn. Bài Excel, Power BI hay Python đặt cùng một câu hỏi cho cả ba công cụ để so.
Câu hỏi thường gặp
pandas có khó học không?
Phần dùng hằng ngày không khó nếu bạn đã biết Python cơ bản: biến, list, dict, hàm. Một nhóm nhỏ hàm như read_csv, head, info, lọc dòng, groupby, merge, fillna và to_csv đã đủ cho phần lớn việc phân tích hằng ngày. Phần khó là đọc dữ liệu thật vốn bẩn và quyết định sửa thế nào.
pandas khác NumPy thế nào?
NumPy lo mảng số cùng kiểu và các phép tính trên mảng. pandas xây trên NumPy, thêm tên cột, index, cột chữ, ngày tháng và các thao tác kiểu bảng như groupby hay merge. Cột số của DataFrame được lưu bằng mảng NumPy, nên cài pandas là có NumPy.
Nên học pandas hay SQL trước?
Nếu dữ liệu của bạn nằm trong file CSV hay Excel, học pandas trước sẽ dùng được ngay. Nếu dữ liệu nằm trong cơ sở dữ liệu của công ty, SQL là bắt buộc. Người làm Data Analyst thường cần cả hai, bài Data Analyst cần học gì có thứ tự học gợi ý.
Code pandas 2 có chạy được trên pandas 3 không?
Phần lớn vẫn chạy. Ba chỗ cần soát lại là kiểm tra kiểu object cho cột chữ, các lệnh gán qua hai lần chọn liên tiếp và các chỗ sửa bảng con với mong muốn bảng gốc đổi theo. pandas có hướng dẫn chuyển sang pandas 3 liệt kê đủ các thay đổi.
Đọc tiếp
Học Python từ số 0: lộ trình cho người chưa biết code, nên đọc trước nếu bạn chưa quen với biến, list và hàm.
Python cho Excel: khi đã hiểu pandas là gì, bài này dùng pandas gộp 12 file Excel bán hàng của chính Tiệm Mây thành một báo cáo có định dạng.
Làm sạch dữ liệu với pandas: bỏ dòng trùng, xử lý ô trống, xóa cột thừa và đổi kiểu trên file 6.180 đơn hàng bẩn của cùng cửa hàng mẫu.
DataFrame, Series, lọc, groupby và các thay đổi của pandas 3 được dạy kỹ trong ebook Phân tích dữ liệu với Python. Sách viết cho pandas 3, có 89 bài tập tự chấm và dùng chính bộ dữ liệu Tiệm Mây trong bài này. Nếu muốn học theo đề cương có project được chấm, khóa Phân tích dữ liệu với Python là chặng thứ hai của lộ trình AI Engineer từ số 0.
Code chạy ngày 26/10/2026 trên máy ảo AIDev Cloud: Ubuntu 24.04.4, Intel Xeon E5-2696 v4 25 vCPU, 54 GiB RAM, Python 3.12.3, pandas 3.1.0 và pandas 2.3.3, NumPy 2.5.4. Dữ liệu Tiệm Mây là dữ liệu mô phỏng của AIDev (giấy phép MIT).
Chuyên mục
Phân tích dữ liệuTham vấn chuyên môn
Nhà sáng lập AIDev và VietPlatform · Thạc sĩ AI MSE
- Tốt nghiệp thủ khoa xuất sắc Thạc sĩ AI MSE.
- Đồng sáng lập, CTO E-University, SVOnline: số hóa 10+ đại học, 40.000+ sinh viên.
- Xây hệ thống AI cho doanh nghiệp tại VietPlatform.


