
Vấn đề của pandas không phải là hiệu suất. Đó là gánh nặng nhận thức.
Các công cụ dataframe nhanh hơn rất hữu ích, nhưng chúng không làm giảm lượng cú pháp mà một nhà phân tích phải ghi nhớ. Bài viết "Vấn đề của pandas không phải là hiệu suất. Đó là gánh nặng nhận thức." xuất hiện lần đầu trên Towards Data Science.
Khoa học dữ liệu
Vấn đề của pandas không phải là hiệu suất. Đó là gánh nặng nhận thức.
Các công cụ dataframe nhanh hơn rất tốt, nhưng chúng không làm giảm lượng cú pháp mà một nhà phân tích phải ghi nhớ.
Neal Hughes
Ngày 7/8/2026
10 phút đọc
Máy tính xử lý dữ liệu; nhà phân tích ghi nhớ cú pháp. Minh họa được tạo bằng OpenAI.
Trong nhiều năm, cuộc thảo luận về pandas đã tập trung vào hiệu suất.
Như người tạo ra nó đã thừa nhận, nền tảng của pandas không được xây dựng cho khối lượng công việc dữ liệu ngày nay. Theo thời gian, pandas đã đạt được những tiến bộ thực sự trong lĩnh vực này, đặc biệt là với bản phát hành pandas 3.0 gần đây. Trong khi đó, Polars và DuckDB đã cho thấy những gì có thể đạt được khi các cấu trúc dữ liệu hiện đại là một phần của thiết kế ngay từ đầu.
Nhưng hiệu suất chỉ là một trong những chi phí trong phân tích dữ liệu. Đối với nhiều tác vụ hàng ngày, hiệu suất back-end là mối quan tâm thứ yếu. Tập dữ liệu nằm gọn trong bộ nhớ. Phép tính hoàn thành trong một giây. Nhưng nhà phân tích phải dành thời gian để nhớ một API, sắp xếp lại các dấu ngoặc, tra cứu một mẫu tổng hợp và kiểm tra xem một khóa nhóm có âm thầm trở thành một chỉ mục hay không.
CPU thì nhàn rỗi. Con người thì không.
Vấn đề sâu xa hơn với pandas—và, ở các mức độ khác nhau, với hầu hết các API dataframe—là gánh nặng nhận thức.
Chi phí ẩn trong mã thông thường
Hãy xem xét một tác vụ đơn giản: giữ các giao dịch bán hàng dương, tính toán lợi nhuận, tóm tắt theo khu vực và sắp xếp kết quả:
summary = (
sales.loc[sales["revenue"] > 0]
.assign(margin=lambda df: df["revenue"] - df["cost"])
.groupby("region", as_index=False)
.agg(
total_revenue=("revenue", "sum"),
average_margin=("margin", "mean"),
)
.sort_values("total_revenue", ascending=False)
)
Đây không phải là mã pandas tệ. Đây không phải là một ví dụ tồi tệ được cố tình tạo ra để giành chiến thắng trong một cuộc so sánh cú pháp. Một người dùng pandas có kinh nghiệm có thể đọc nó mà không gặp khó khăn.
Nhưng hãy chú ý có bao nhiêu phần của biểu thức liên quan đến việc thương lượng với API hơn là chi tiết logic thực tế:
Một cột đôi khi là sales["revenue"], đôi khi là df["revenue"], và đôi khi là chuỗi "revenue".
Tạo một cột yêu cầu assign và một lambda nếu chúng ta muốn giữ chuỗi phương thức.
Một phép tổng hợp được đặt tên được biểu thị dưới dạng một tuple có thứ tự là cột trước, hàm sau.
Thứ tự giảm dần được biểu thị bằng cách đặt tùy chọn ascending thành False.
Hành vi của khóa nhóm phụ thuộc vào as_index, một tham số mà ý nghĩa của nó không rõ ràng từ tác vụ phân tích.
Không có chi tiết nào trong số này khó khăn một cách riêng lẻ. Nhưng mỗi chi tiết đều tiêu tốn một phần nhỏ bộ nhớ làm việc của con người mà lẽ ra có thể được sử dụng để suy nghĩ về dữ liệu.
Các chỉ mục của pandas là một ví dụ điển hình về sự căng thẳng này. Sự xuất hiện quen thuộc của .reset_index() sau một group-by không chỉ là một vài lần gõ phím bổ sung; đó là một sự phân tâm khó chịu. Và tất nhiên, khả năng tương thích ngược giới hạn mức độ một thư viện trưởng thành có thể thiết kế lại bề mặt của nó một cách triệt để.
"AI có thể viết nó bây giờ" chỉ là một nửa câu trả lời
Bạn có thể nói, ai quan tâm nếu cú pháp pandas không hoàn hảo. Các tác nhân AI có thể tạo mã pandas cho chúng ta bây giờ, vậy điều đó có quan trọng gì? Đúng, các mô hình ngôn ngữ lớn có thể tiết kiệm rất nhiều thời gian. Nhưng tạo mã chỉ là một phần của công việc phân tích.
Việc lập trình để phân tích dữ liệu khác với phát triển phần mềm. Nó thường bắt đầu bằng một câu hỏi và câu hỏi này sẽ thay đổi ngay khi kết quả đầu tiên xuất hiện. Người phân tích lọc dữ liệu, nhận thấy điều gì đó bất ngờ, kiểm tra, điều chỉnh cách nhóm, phát hiện các giá trị bị thiếu, tạo biểu đồ và sau đó nhận ra rằng câu hỏi ban đầu của mình là sai.
Quy trình làm việc không phải là:
> đặc tả → mã → sản phẩm hoàn chỉnh
Mà gần với:
> câu hỏi → biến đổi → kết quả → câu hỏi mới → biến đổi mới
Vòng lặp này mang tính khám phá, sáng tạo và tương tác. Trong bối cảnh này, việc con người có thể biến đổi dữ liệu thủ công với độ trễ tối thiểu là rất có giá trị. Nhiều nhà phân tích vẫn đang nhập các đoạn mã pandas nhỏ vào một notebook, ngay cả khi họ hiện đang tin tưởng AI để viết các hàm hoặc mô-đun lớn hơn.
Khả năng đọc là quan trọng
Thứ hai, mặc dù AI giảm chi phí gõ phím, nhưng nó không loại bỏ chi phí đọc, kiểm tra và hiểu.
Một pipeline dữ liệu Python cũng là tài liệu. Nó cho đồng nghiệp – hoặc chính bạn trong tương lai – biết những gì đã được lọc, những biến nào đã được tạo và số liệu cuối cùng đến từ đâu. Con đường càng dễ theo dõi thì việc xem xét các giả định và phát hiện lỗi càng dễ dàng.
Mã boilerplate làm suy yếu tài liệu đó bằng cách giảm tỷ lệ tín hiệu trên nhiễu. Logic nghiệp vụ vẫn hiện diện, nhưng nó bị bao quanh bởi tên dataframe, bộ chọn cột, dấu ngoặc kép, lambdas, bí danh và các tùy chọn dành riêng cho API.
Thành thật mà nói: đọc mã pandas của người khác, đặc biệt là mã được xây dựng thông qua một phiên tương tác, có thể khá khó khăn. Không còn nghi ngờ gì nữa, mã pandas không phải là cách ngắn gọn hoặc dễ đọc nhất để thể hiện logic cơ bản của một pipeline dữ liệu.
Sự trỗi dậy của mã do AI tạo ra càng củng cố lập luận này. Nếu nhiều mã hơn sẽ được tạo tự động, con người cần các biểu diễn giúp dễ dàng kiểm tra logic được tạo ra.
Sự phổ biến bền vững của các công cụ dữ liệu trực quan
Nếu bạn vẫn chưa bị thuyết phục rằng tất cả những điều này đều quan trọng, hãy dành một phút để suy nghĩ về sự phổ biến của các công cụ dữ liệu trực quan.
Excel vẫn được sử dụng rộng rãi trong công việc phân tích ở hầu hết các ngành. Tableau, Power BI, KNIME, Alteryx, Metabase, Orange, RapidMiner và nhiều sản phẩm khác cung cấp các biến thể khác nhau của cùng một lời hứa: tương tác trực tiếp hơn với dữ liệu, xem phản hồi nhanh chóng và tránh phải dịch mọi suy nghĩ thành một API lập trình đa năng.
Tôi sử dụng Excel rất nhiều. Có rất nhiều trường hợp việc đưa một tập dữ liệu nhỏ vào bảng tổng hợp nhanh hơn là viết một pipeline pandas. Các công cụ trực quan có thể trực quan hơn và giúp giảm độ trễ từ suy nghĩ đến kết quả.
Tất nhiên, mã có một mục đích. Một tập lệnh cung cấp một dấu vết kiểm toán.
Nguồn tin: Towards Data Science — Tác giả: Neal Hughes. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.