Chuyển đến nội dung chính

PySpark: Cách loại bỏ một cột khỏi DataFrame

Trong PySpark, bạn có thể loại bỏ một hoặc nhiều cột khỏi DataFrame bằng phương thức .drop("column_name") cho một cột hoặc .drop(["column1", "column2", ...]) cho nhiều cột.
Đã cập nhật 5 thg 10, 2026  · 6 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity
Làm sạch và chuẩn bị dữ liệu là các bước thiết yếu trong mọi dự án khoa học dữ liệu hoặc kỹ thuật dữ liệu. Để đảm bảo chất lượng và độ tin cậy của dữ liệu, chúng ta cần xác định và xử lý các điểm không nhất quán, lỗi và giá trị thiếu.

PySpark đặc biệt hữu ích khi làm việc với các tập dữ liệu lớn vì cung cấp các phương thức hiệu quả để làm sạch dữ liệu. Trong bài viết này, chúng ta sẽ tập trung vào một tác vụ làm sạch phổ biến: cách loại bỏ cột khỏi DataFrame bằng các phương thức .drop() và .select() của PySpark.

Để tìm hiểu thêm về PySpark, hãy xem khóa học Giới thiệu về PySpark này.

 

Vì sao cần loại bỏ cột trong PySpark DataFrame?

Loại bỏ cột là một tác vụ phổ biến trong tiền xử lý dữ liệu vì nhiều lý do. Việc loại bỏ các cột không cần thiết hoặc không liên quan có thể giảm đáng kể lượng dữ liệu cần xử lý. Điều này giúp bộ dữ liệu gọn nhẹ hơn, dễ phân tích hơn và có thể cải thiện hiệu năng của các job PySpark.

Ngoài ra, khi chuẩn bị dữ liệu cho mô hình học máy, bước chọn đặc trưng thường liên quan đến việc loại bỏ những cột không đóng góp vào độ chính xác của mô hình hoặc có thể tạo nhiễu. Bước này giúp mô hình hiệu quả và gọn nhẹ hơn.

Cuối cùng, loại bỏ cột cũng có thể là chiến lược cải thiện chất lượng dữ liệu. Nếu một cột chứa tỷ lệ lớn giá trị thiếu hoặc dữ liệu sai, loại bỏ nó có thể là lựa chọn tốt nhất.

Cách loại bỏ một cột khỏi PySpark DataFrame

Giả sử chúng ta có một DataFrame df với năm cột: player_name, player_position, team, minutes_played và score. Cột minutes_played có nhiều giá trị thiếu, nên chúng ta muốn loại bỏ nó.

Trong PySpark, chúng ta có thể loại bỏ một cột khỏi DataFrame bằng phương thức .drop().

Cú pháp là df.drop("column_name") trong đó:

  • df là DataFrame mà chúng ta muốn loại bỏ cột
  • column_name là tên cột cần loại bỏ.

Phương thức df.drop() trả về một DataFrame mới với các cột đã chỉ định được loại bỏ.

Cách loại bỏ một cột như sau:

df_dropped = df.drop("minutes_played")

Cách loại bỏ nhiều cột khỏi PySpark DataFrame

Giả sử chúng ta muốn phân tích DataFrame df nhưng không muốn xét đến đội bóng hoặc vị trí của cầu thủ — vậy chúng ta muốn loại bỏ cả hai cột này. Có hơn một cách để làm điều đó, hãy cùng xem các lựa chọn.

Để loại bỏ nhiều cột khỏi PySpark DataFrame, chúng ta có thể truyền một danh sách tên cột vào phương thức .drop(). Có hai cách thực hiện:

# Cách 1: Truyền tên cột dưới dạng một danh sách
df_dropped = df.drop(["team", "player_position"])

# Cách 2: Truyền tên cột dưới dạng các đối số riêng lẻ
df_dropped = df.drop("team", "player_position")

Ngoài ra, chúng ta có thể xâu chuỗi nhiều lần gọi .drop(). Mặc dù hoạt động được về mặt kỹ thuật, cách này thường không được coi là hiệu quả hay gọn gàng nhất. Mỗi lần gọi tạo ra một DataFrame mới, có thể gây overhead, đặc biệt khi làm việc với tập dữ liệu lớn.

df_dropped = df.drop("team").drop("player_position")

Loại bỏ cột có điều kiện

Thay vì chỉ định cột nào cần loại bỏ, chúng ta có thể đảo ngược cách tiếp cận và chỉ chọn những cột đáp ứng một điều kiện hay yêu cầu. Khi đó, DataFrame trả về sẽ không còn chứa các cột không mong muốn.

Sử dụng .select()

Chúng ta có thể dùng phương thức .select() trong PySpark cùng với list comprehension để loại bỏ một hoặc nhiều cột dựa trên tiêu chí nhất định. Phương thức này linh hoạt, có thể dùng cho từ điều kiện đơn giản đến phức tạp.

Phương thức này có cú pháp df.select([col for col in df.columns if condition]), trong đó:

  • df là DataFrame bạn đang làm việc.
  • condition là tiêu chí dùng để lọc các cột bạn muốn giữ lại.

Hãy tiếp tục làm việc với DataFrame df và chọn tất cả các cột trừ cột team:

df_sel = df.select([col for col in df.columns if col != "team"])

Điều kiện phức tạp với .selectExpr()

Nếu bạn quen với SQL và cần áp dụng các điều kiện phức tạp hơn khi lọc cột, phương thức .selectExpr() của PySpark là một giải pháp mạnh mẽ. Nó cho phép sử dụng các biểu thức giống SQL để chọn và thao tác với cột trực tiếp trong mã PySpark.

Chẳng hạn, xem ví dụ sau:

# Chọn các cột cụ thể và tạo cột 'FullMatch' mới
df_sel = df.selectExpr("player_name", "player_position", "minutes_played >= 60 as FullMatch")

Ở đây, chúng ta không chỉ loại trừ một cột. Chúng ta đang:

  1. Chọn các cột player_name và player_position.
  2. Tạo một cột mới tên là FullMatch để cho biết liệu một cầu thủ có chơi trọn vẹn trận đấu (60 phút trở lên) hay không.

Tính linh hoạt này khiến .selectExpr() trở nên vô cùng hữu ích trong những tình huống mà list comprehension đơn giản có thể không đủ.

Thực hành tốt nhất

Khi quyết định loại bỏ cột khỏi DataFrame, việc tuân theo một số thực hành tốt nhất là rất quan trọng để duy trì tính toàn vẹn dữ liệu, khả năng đọc của mã và hiệu quả.

1. Sao lưu dữ liệu: Trước khi sửa đổi DataFrame, đặc biệt là khi loại bỏ cột, hãy tạo một bản sao lưu. Điều này đảm bảo bạn có thể quay lại dữ liệu gốc khi cần.

df_backup = df.persist()  # Cache DataFrame để tránh tính toán lại sau này

2. Loại bỏ với inplace=False (mặc định): Theo mặc định, phương thức .drop() trả về một DataFrame mới mà không sửa đổi bản gốc. Cách này nói chung an toàn hơn. Nếu bạn thật sự chắc chắn muốn sửa đổi DataFrame gốc, bạn có thể dùng inplace=True, nhưng hãy thận trọng.

df_dropped = df.drop("column_to_drop", inplace=False) # Hành vi mặc định

3. Ghi chú quyết định của bạn: Nếu làm việc trong dự án cộng tác hoặc dự đoán sẽ quay lại mã trong tương lai, hãy thêm chú thích giải thích vì sao bạn chọn loại bỏ một số cột. Tài liệu này cung cấp ngữ cảnh hữu ích cho bạn và người khác.

4. Cân nhắc đổi tên cột: Thay vì loại bỏ cột, hãy cân nhắc liệu việc đổi tên có phù hợp hơn không, đặc biệt nếu thông tin trong đó có thể hữu ích cho phân tích sau này. PySpark cung cấp phương thức .withColumnRenamed() để đổi tên cột.

Kết luận

Trong hướng dẫn này, chúng ta đã học cách loại bỏ một và nhiều cột bằng các phương thức .drop() và .select(). Chúng ta cũng đề cập đến các phương án thay thế để tận dụng biểu thức SQL nếu cần kỹ thuật chọn phức tạp hơn.

Nếu bạn muốn mở rộng kỹ năng và tận dụng các kỹ thuật mạnh mẽ của PySpark, hãy xem các khóa học và tài liệu sau: 

Câu hỏi thường gặp

Làm thế nào để loại bỏ cột dựa trên regex trong PySpark?

Để loại bỏ các cột dựa trên mẫu regex trong PySpark, bạn có thể lọc tên cột bằng list comprehension và mô-đun re (biểu thức chính quy), sau đó truyền danh sách đã lọc vào phương thức .drop().

Làm sao để loại bỏ các cột có cùng tên trong PySpark?

PySpark không cho phép các tên cột trùng lặp trong một DataFrame. Nếu nguồn dữ liệu của bạn có tên trùng lặp, bạn có thể gặp lỗi khi tạo DataFrame. Thực hành tốt nhất là xử lý các tên trùng lặp ngay tại nguồn hoặc trong quá trình tạo DataFrame.

Làm sao để loại bỏ các cột chỉ có giá trị null trong PySpark?

Để loại bỏ các cột chỉ chứa giá trị null trong PySpark, trước tiên chúng ta có thể tính số lượng null trong mỗi cột bằng count(when(col(c).isNull(), c)). Sau đó, xác định các cột có số lượng null bằng với tổng số dòng của DataFrame. Cuối cùng, loại bỏ các cột này bằng phương thức .drop().

Làm sao để loại bỏ cột có điều kiện trong PySpark?

Sử dụng df.select([col for col in df.columns if condition]).


Maria Eugenia Inzaugarat's photo
Author
Maria Eugenia Inzaugarat
Chủ đề
Big Data
Python

Học PySpark với các khóa học này!

Khóa học

Feature Engineering với PySpark

4 giờ
18.1K
Nắm vững kỹ năng xử lý dữ liệu và xây dựng đặc trưng—hai công việc chiếm 70-80% thời gian của Nhà khoa học dữ liệu.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm