Khóa học
Phân tích dữ liệu thường dựa nhiều vào thư viện pandas không thể thiếu. Thư viện này cung cấp các cấu trúc dữ liệu và hàm thao tác dữ liệu dễ dùng, cho phép xử lý hiệu quả các tập dữ liệu dạng bảng. Với pandas, bạn có thể dễ dàng nhập, làm sạch, biến đổi và tổng hợp dữ liệu từ nhiều nguồn khác nhau, bao gồm tệp CSV, bảng tính Excel, cơ sở dữ liệu SQL và hơn thế nữa.
Nếu bạn muốn học cách nhập và làm sạch dữ liệu, tính toán thống kê và tạo trực quan hóa với pandas, hãy xem khóa học Data Manipulation with pandas của chúng tôi.
Trong hướng dẫn này, chúng ta sẽ khám phá phiên bản mới nhất của thư viện pandas, tìm hiểu các tính năng mới kèm ví dụ cách sử dụng.
Bản cập nhật pandas 2.0 được mong đợi từ lâu đã chính thức ra mắt
Pandas 2.0 được phát hành vào ngày 3 tháng 4 năm 2023, đánh dấu ba năm phát triển. Phiên bản mới này mang đến nhiều tính năng, như hỗ trợ mở rộng mảng mở rộng (extension array), hỗ trợ DataFrame cho PyArrow và độ phân giải datetime không giới hạn ở nanosecond. Tuy nhiên, nó cũng áp dụng các ngừng hỗ trợ (deprecation) bắt buộc, dẫn đến thay đổi API.
Là một bản cập nhật quan trọng, phiên bản 2.0 triển khai tất cả các mục ngừng hỗ trợ ở dòng 1.X. Bản phát hành gần nhất 1.5.3 có khoảng 150 cảnh báo. Nếu mã của bạn không còn cảnh báo ở 1.X, thì nhiều khả năng sẽ tương thích với 2.0.
Khám phá các tính năng mới nhất trong pandas 2.0
Hãy xem pandas 2.0 có gì mới, bao gồm cách sử dụng một số tính năng đã được cải thiện.
Hiệu năng cải thiện: Nhanh hơn và tiết kiệm bộ nhớ hơn
PyArrow có thể xem là tính năng nổi bật của lần phát hành này.
Pandas ban đầu được phát triển dựa trên các cấu trúc dữ liệu của NumPy để quản lý bộ nhớ, nhưng giờ đây người dùng có thể chọn sử dụng PyArrow làm định dạng bộ nhớ nền (backing memory format).
PyArrow là một thư viện Python (xây dựng trên Arrow) cung cấp giao diện xử lý các tập dữ liệu lớn bằng cấu trúc bộ nhớ Arrow, cùng các công cụ tuần tự hóa, nén và tích hợp với các hệ thống xử lý dữ liệu khác như Apache Spark và Apache Parquet.
Arrow là một định dạng dữ liệu cột nguồn mở, độc lập ngôn ngữ để biểu diễn dữ liệu trong bộ nhớ. Nó được viết bằng C++, nhưng độc lập với ngôn ngữ.
Việc sử dụng bộ nhớ kém hiệu quả do back-end NumPy ban đầu là vấn đề phổ biến khiến người dùng tìm đến các công cụ xử lý dữ liệu khác như Spark, Dask, Ray, v.v. Bằng cách giảm mức tiêu thụ bộ nhớ thông qua back-end của PyArrow, Pandas giờ đây có thể mang lại trải nghiệm gọn nhẹ hơn và giúp người dùng làm việc hiệu quả hơn.
Các phép đo hiệu năng so sánh thao tác mean và replace khi dùng back-end NumPy và PyArrow, cùng với Polars

Polars là một thư viện thao tác dữ liệu dựa trên Rust cho Python, cung cấp API DataFrame tương tự pandas nhưng có hiệu năng và khả năng mở rộng tốt hơn cho các tập dữ liệu lớn. Để tìm hiểu thêm về thư viện Polars, hãy xem trang web chính thức.
Đây là đoạn mã để đọc tệp CSV dùng PyArrow làm back-end:
pd.read_csv(my_file, dytpe_backend='pyarrow')
Nếu bạn muốn học các kỹ thuật hiệu quả trong pandas để tối ưu mã Python, hãy xem khóa học Writing Efficient Code with pandas trên DataCamp.
Kiểu dữ liệu có thể null hiện đã khả dụng
Xử lý giá trị thiếu trong pandas từng gặp khó khăn do NumPy không hỗ trợ giá trị null ở một số kiểu dữ liệu. Chẳng hạn, các dtype số nguyên của NumPy không cho phép giá trị null. Khi có giá trị null trong một cột số nguyên, cột đó sẽ tự động bị chuyển sang dtype số thực, điều này không hay.
Pandas 1.0 đã giới thiệu các dtype có thể null, nhưng cần một chút công sức để sử dụng. May mắn là ở phiên bản mới, khi đọc dữ liệu vào DataFrame, bạn có thể chỉ định dùng các dtype có thể null, giúp quy trình đơn giản hơn nhiều.
pd.read_csv(my_file, use_nullable_dtypes=True)
Tối ưu hiệu năng với Copy-on-Write
Copy-on-Write là một kỹ thuật tối ưu bộ nhớ được Pandas sử dụng để nâng cao hiệu năng và giảm thiểu sử dụng bộ nhớ khi xử lý các tập dữ liệu lớn. Nó khiến Pandas giống với Spark hơn về cách thực thi các phép toán lười (lazy). Phép toán lười là các thao tác không thực thi ngay mà chờ đến khi có một hành động được gọi mới kích hoạt tính toán. Chúng được gọi là "lười" vì trì hoãn thực thi cho đến khi cần thiết để tính và trả về kết quả cuối cùng.
Ý tưởng cốt lõi là tạo một tham chiếu tới dữ liệu gốc khi tạo bản sao của đối tượng pandas, như DataFrame hoặc Series, và chỉ tạo bản sao mới khi có sửa đổi.
Cách tiếp cận này cho phép nhiều bản sao của cùng dữ liệu dùng chung vùng nhớ cho đến khi có thay đổi, loại bỏ việc sao chép dữ liệu dư thừa và giảm đáng kể mức dùng bộ nhớ, từ đó cải thiện hiệu năng.
Các kiểu số của NumPy được Index hỗ trợ
Trong pandas 2.0, tính năng Index được mở rộng để bao gồm các dtype số của NumPy như int8, int16, int32, uint8, uint16, uint32, uint64, float32 và float64, trong khi trước đây chỉ hỗ trợ int64, uint64 và float64.
Cập nhật này cho phép tạo các chỉ mục với kích thước bit thấp hơn, chẳng hạn chỉ mục 32-bit, ở các thao tác vốn trước đây tạo ra chỉ mục 64-bit.
Mọi chỉ mục số hiện được biểu diễn dưới dạng Index với dtype đi kèm.
Cài đặt pip extras
Bằng cách chỉ định extras khi cài đặt pandas bằng pip, bạn có thể cài thêm các nhóm phụ thuộc tùy chọn. Ví dụ:
pip install "pandas[performance, aws]>=2.0.0"
Lệnh này sẽ cài các phụ thuộc tùy chọn performance và aws. Hướng dẫn cài đặt của pandas cung cấp danh sách các extras khả dụng. Bao gồm: [all, performance, computation, fss, aws, gcp, excel, parquet, feather, hdf5, spss, postgresql, mysql, sql-other, html, xml, plot, output_formatting, clipboard, compression, và test] Đừng quên thêm dấu ngoặc kép (“).
Độ phân giải không giới hạn ở nanosecond cho Timestamps
Trong thời gian dài, pandas bị giới hạn khi timestamp chỉ được biểu diễn ở độ phân giải nanosecond. Điều này đồng nghĩa không thể biểu diễn các ngày trước 21/09/1677 hoặc sau 11/04/2264. Giới hạn này gây khó khăn cho các nhà nghiên cứu phân tích chuỗi thời gian kéo dài qua nhiều thế kỷ.
Tuy nhiên, với pandas 2.0, đã bổ sung hỗ trợ các độ phân giải khác như giây, mili giây và micro giây. Cải tiến này cho phép khoảng thời gian lên tới +/- 2,9e11 năm, bao phủ hầu hết các nhu cầu sử dụng.
Định dạng phân tích datetime nhất quán
Trước đây, hàm to_datetime() trong pandas sẽ suy diễn định dạng của từng phần tử một cách độc lập, điều này có thể gây vấn đề khi người dùng mong đợi định dạng nhất quán nhưng hàm lại chuyển đổi định dạng giữa các phần tử.
Mặc dù cách làm này phù hợp với các trường hợp có định dạng ngày tháng lẫn lộn, nó vẫn gây rắc rối cho nhiều người dùng.
Trong pandas 2.0, quá trình phân tích cú pháp đã được điều chỉnh để dùng một định dạng nhất quán, được xác định bởi giá trị đầu tiên không phải NA. Người dùng vẫn có thể chỉ định định dạng; khi đó định dạng đó sẽ được sử dụng.
Hành vi cũ:
ser = pd.Series(['13-01-2000', '12-01-2000'])
pd.to_datetime(ser)
Out[2]:
0 2000-01-13
1 2000-12-01
dtype: datetime64[ns]
Hành vi mới:
ser = pd.Series(['13-01-2000', '12-01-2000'])
pd.to_datetime(ser)
Out[43]:
0 2000-01-13
1 2000-01-12
dtype: datetime64[ns]
Ví dụ trích từ tài liệu chính thức.
Tương thích và di trú
Các thay đổi API không tương thích ngược đề cập đến việc chỉnh sửa API của thư viện có thể làm hỏng mã hiện có hoặc tích hợp sẵn. Những thay đổi này có thể bao gồm việc xóa hoặc đổi tên hàm, lớp hoặc tham số, hoặc thay đổi hành vi mong đợi của chúng. Xem danh sách tất cả thay đổi phá vỡ tương thích trong pandas 2.0 tại tài liệu về thay đổi API không tương thích ngược.
Để cập nhật thư viện pandas, chỉ cần chạy lệnh này trong terminal hoặc notebook của bạn:
pip install -U pandas
Cộng đồng và hỗ trợ
Xem đầy đủ ghi chú phát hành cho pandas 2.0
Bạn cũng có thể sử dụng cheat sheet pandas cho khoa học dữ liệu của chúng tôi như một hướng dẫn nhanh về những điều cơ bản của thư viện phân tích dữ liệu Python, bao gồm cả mẫu mã.

Cheatsheet từ DataCamp. Nguồn
Pandas là một dự án mã nguồn mở do cộng đồng dẫn dắt, được phát triển bởi một nhóm lớn cộng tác viên và một nhóm nhỏ người bảo trì. Ban lãnh đạo pandas cam kết xây dựng một cộng đồng tích cực, hòa nhập và cởi mở. Nếu bạn muốn tham gia, hãy xem hướng dẫn cộng đồng dành cho cộng tác viên của pandas.
Kết luận
Pandas 2.0 đánh dấu một bản cập nhật quan trọng cho thư viện phân tích dữ liệu phổ biến, mang đến các tính năng như cải thiện hiệu năng nhờ PyArrow, kiểu dữ liệu có thể null, tối ưu copy-on-write, mở rộng hỗ trợ các kiểu số của NumPy trong chỉ mục và độ phân giải datetime không giới hạn ở nanosecond.
Với bản cập nhật này, pandas có thể xử lý các tập dữ liệu lớn hơn với việc sử dụng bộ nhớ hiệu quả hơn, mang lại trải nghiệm gọn nhẹ hơn cho người dùng.
Để tận dụng các tính năng mới, người dùng chỉ cần cập nhật thư viện pandas bằng lệnh pip install -U pandas. Cộng đồng pandas tiếp tục cung cấp hỗ trợ và tài nguyên, bao gồm các khóa học trên DataCamp, để giúp người dùng nâng cao kỹ năng phân tích dữ liệu.
Dưới đây là một vài hướng dẫn xuất sắc mà bạn có thể thấy hữu ích trên hành trình học phân tích dữ liệu.