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

Làm chủ phương thức Pandas .explode(): Hướng dẫn toàn diện

Tìm hiểu mọi điều bạn cần biết về phương thức .explode() của pandas, bao gồm cột đơn và nhiều cột, xử lý dữ liệu lồng nhau, và các lỗi thường gặp với ví dụ mã Python thực tiễn.
· 5 phút đọc

Khám phá cùng AI

Trong thế giới thao tác dữ liệu với pandas, phương thức .explode() thường là công cụ hữu ích khi làm việc với các danh sách trong DataFrame. Hướng dẫn này là cẩm nang để bạn làm chủ .explode(), từ cơ chế cơ bản đến ứng dụng nâng cao và những lỗi thường gặp.

Câu trả lời ngắn: Đây là cách .explode() hoạt động

Nếu bạn muốn câu trả lời nhanh, chỉ cần đọc mục này. Phương thức .explode() được thiết kế để trải các phần tử trong một cột dạng danh sách ra nhiều hàng, biến mỗi phần tử trong danh sách thành một hàng riêng. Ví dụ, chúng ta sẽ dùng DataFrame df sau để minh họa quy trình:

ID

Sở thích

1

['Python', 'Data Science']

2

['Machine Learning', 'AI']

Phương thức .explode() sẽ trải các phần tử của cột Interests như sau:

# Explode the Interests column 
exploded_df = df.explode('Interests')

ID

Sở thích

1

Python

1

Data Science

2

Machine Learning

2

AI

Phương thức .explode() của Pandas là gì?

Phương thức .explode() được thiết kế để đơn giản hóa việc xử lý dữ liệu lồng nhau, như list hoặc tuple, trong các DataFrame của pandas. Bằng cách chuyển mỗi phần tử của cấu trúc giống danh sách thành một hàng riêng, .explode() giúp dữ liệu dễ truy cập và sẵn sàng cho phân tích hơn.

Phương thức .explode() hoạt động như thế nào?

Chức năng của .explode() vừa mạnh mẽ vừa đơn giản, tập trung vào tính thân thiện với người dùng và hiệu quả trong các tác vụ thao tác dữ liệu.

  • Column: Chỉ định cột chứa các mục dạng danh sách cần explode.
  • ignore_index: Khi đặt là True, phương thức sẽ đặt lại chỉ mục về chỉ mục số nguyên mặc định, giúp giữ tính toàn vẹn của DataFrame sau khi explode. Giá trị mặc định là False.

Hai cách sử dụng phương thức .explode() của Pandas

Explode một cột duy nhất trong Pandas

Trường hợp sử dụng phổ biến nhất là explode một cột, mở rộng mỗi mục dạng danh sách của nó thành các hàng riêng lẻ. Ở phần câu trả lời ngắn, chúng ta đã trình bày chính xác ví dụ này. Hãy xem lại. Ở đây chúng ta có DataFrame df, chứa ID của từng người & các mối quan tâm học tập của họ. Như bạn thấy, các mối quan tâm học tập được định dạng dưới dạng list.

ID

Sở thích

1

['Python', 'Data Science']

2

['Machine Learning', 'AI']

Phương thức .explode() sẽ trải các phần tử của cột Interests thành các hàng riêng như sau:

# Explode the Interests column 
exploded_df = df.explode('Interests')

ID

Sở thích

1

Python

1

Data Science

2

Machine Learning

2

AI

Phương thức này đặc biệt hữu ích cho các cột chứa dữ liệu phân loại hoặc nhiều thuộc tính cho mỗi quan sát.

Explode nhiều cột trong Pandas

Bạn cũng có thể gặp tình huống cần explode nhiều cột trong một DataFrame. Điều này đặc biệt hữu ích khi làm việc với các bộ dữ liệu mà nhiều cột chứa cấu trúc dạng danh sách cần được mở ra đồng thời. Hãy thêm một cột Tools vào df để minh họa:

ID

Sở thích

Công cụ

1

['Python', 'Data Science']

['Pandas', 'NumPy']

2

['Machine Learning', 'AI']

['Scikit-learn', 'TensorFlow']

Để explode nhiều cột, chỉ cần đưa các cột cần explode vào một danh sách

# Explode the Interests & Tools columns
exploded_df = df.explode(['Interests', 'Tools'])

ID

Sở thích

Công cụ

1

Python

Pandas

1

Data Science

NumPy

2

Machine Learning

Scikit-learn

2

AI

TensorFlow

Phương thức này đặc biệt hữu ích khi làm việc với nhiều cột chứa danh sách. Tuy nhiên, vẫn có một số lỗi thường gặp khi làm việc với .explode(), chúng ta sẽ tìm hiểu ở phần sau.

Các lỗi thường gặp khi dùng .explode() trong Pandas và cách khắc phục

Explode trùng lặp cột

Một lỗi phổ biến khi làm việc với .explode() là vô tình explode các cột trùng lặp khi sử dụng phương thức. Hãy luôn đảm bảo danh sách các cột bạn đưa vào là duy nhất!

# Incorrect, exploding duplicate columns
df.explode(['Interests','Tools','Interests'])

# Correct, exploding unique columns
df.explode(['Interests','Tools'])

Explode chuỗi trông giống danh sách

Nhiều khi, bạn có các hàng trong DataFrame là chuỗi nhưng trông như danh sách. Cố gắng explode một cột có chuỗi trông giống danh sách, như "['Python', 'AI']", sẽ không tạo ra thay đổi gì vì phương thức .explode() yêu cầu đối tượng dạng danh sách thực sự, không phải chuỗi có hình thức giống danh sách. Dưới đây là ví dụ về tình huống này và cách khắc phục! Giả sử df có các giá trị sau:

ID

Sở thích

1

"['Python', 'Data Science']"

2

"['Machine Learning', 'AI']"

Như bạn thấy, cột Interests có các giá trị là chuỗi trông giống danh sách. Dùng .explode() trên Interests sẽ không thay đổi gì vì các giá trị là chuỗi đơn. Để khắc phục, ta chuyển các giá trị của Interests thành danh sách.

import ast

df['Interests'] = df['Interests'].apply(ast.literal_eval)
exploded_df = df.explode('Interests')
print(exploded_df) # This will work

Độ dài không khớp ở nhiều cột

Khi làm việc với các DataFrame của pandas, một lỗi thường gặp là gặp các hàng mà cấu trúc dạng danh sách ở những cột được chỉ định để explode có độ dài không khớp. Sự chênh lệch này có thể dẫn đến dữ liệu lệch hoặc không đầy đủ sau khi dùng .explode() trên nhiều cột. Ví dụ, giả sử df như sau:

ID

Sở thích

Công cụ

1

['Python', 'Data Science']

['Pandas']

2

['Machine Learning']

['Scikit-learn', 'TensorFlow']

Như thấy, các cột Interests và Tools chứa danh sách có độ dài khác nhau. Dùng .explode() trên các cột này như nguyên trạng sẽ dẫn đến lỗi, vì các cột phải có số lượng giá trị trong danh sách khớp nhau. Để khắc phục, bạn có thể đệm danh sách bằng None với một hàm tùy chỉnh như sau:

​​# Function to pad lists to the same length
def pad_lists(row):
    max_len = max(len(row['Interests']), len(row['Tools']))
    row['Interests'] += [None] * (max_len - len(row['Interests']))
    row['Tools'] += [None] * (max_len - len(row['Tools']))
    return row

# Apply the padding function to each row
df = df.apply(pad_lists, axis=1)

# Now, safely explode both columns
df.explode(['Interests','Tools'])

ID

Sở thích

Công cụ

1

Python

Pandas

1

Data Science

None

2

Machine Learning

Scikit-learn

2

None

TensorFlow

Kết luận

Tóm lại, .explode() là một phương thức hữu ích khi mở các phần tử trong danh sách giá trị thành các hàng trong một DataFrame của Pandas. Để học thêm về pandas, hãy xem các tài nguyên sau:

Adel Nehme

Tác giả

Adel Nehme

Adel là một nhà giáo dục Khoa học Dữ liệu, diễn giả, và Phó Chủ tịch phụ trách Truyền thông tại DataCamp. Adel đã phát hành nhiều khóa học và buổi đào tạo trực tiếp về phân tích dữ liệu, học máy và kỹ thuật dữ liệu. Anh đam mê lan tỏa kỹ năng dữ liệu và hiểu biết dữ liệu trong toàn tổ chức, cũng như những điểm giao thoa giữa công nghệ và xã hội. Anh có bằng Thạc sĩ Khoa học Dữ liệu và Phân tích Kinh doanh. Thời gian rảnh, bạn có thể bắt gặp anh vui đùa cùng chú mèo Louis.

Chủ đề

Liên quan