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.
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')Được hỗ trợ bởi
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')Được hỗ trợ bởi
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'])Được hỗ trợ bởi
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!
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Được hỗ trợ bởi
Độ 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 lengthdefpad_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'])Được hỗ trợ bởi
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 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.
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 độngNế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ộtInterestsnhư sau: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 PandasExplode 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ộtIntereststhành các hàng riêng như sau: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
Toolsvàodfđể 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
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ụcExplode 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!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ửdfcó các giá trị sau:ID
Sở thích
1
"['Python', 'Data Science']"
2
"['Machine Learning', 'AI']"
Như bạn thấy, cột
Interestscó các giá trị là chuỗi trông giống danh sách. Dùng.explode()trênInterestssẽ 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ủaIntereststhành danh sách.Độ 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ửdfnhư 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
InterestsvàToolschứ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ằngNonevới một hàm tùy chỉnh như sau: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: