Pandas là một công cụ đặc biệt cho phép chúng tôi thực hiện các thao tác dữ liệu phức tạp một cách hiệu quả và hiệu quả. Bên trong gấu trúc, chúng tôi chủ yếu xử lý tập dữ liệu ở dạng DataFrame. DataFrames là cấu trúc dữ liệu 2 chiều trong gấu trúc. DataFrames bao gồm các hàng, cột và dữ liệu
Xóa x số ký tự đầu tiên khỏi mỗi hàng trong một cột của DataFrame
Giả sử chúng tôi có Khung dữ liệu về chi tiết ngân hàng của một số người có chứa một số cột bắt buộc. Trong cột Tài khoản ngân hàng, chúng tôi có một chuỗi 5 ký tự không mong muốn trong mỗi giá trị, chúng tôi cần xóa chuỗi không mong muốn này khỏi mỗi hàng
Một chuỗi là một nhóm các ký tự, các ký tự này có thể bao gồm tất cả các chữ thường, chữ hoa và các ký tự đặc biệt có trên bàn phím của hệ thống máy tính. Chuỗi là một kiểu dữ liệu và số lượng ký tự trong chuỗi được gọi là độ dài của chuỗi
Khi làm việc với gấu trúc, chúng ta thường cần thực hiện một số tác vụ tiền xử lý để chuyển đổi dữ liệu thành dạng mong muốn. Một nhiệm vụ phổ biến thường được yêu cầu trong bước này là chuyển đổi các cột chuỗi theo cách mà chúng tôi loại bỏ một số phần không mong muốn
Trong hướng dẫn ngắn ngày hôm nay, chúng ta sẽ thảo luận về một số cách tiếp cận tiềm năng mà cuối cùng bạn có thể áp dụng trên DataFrames của gấu trúc để loại bỏ bất kỳ phần không mong muốn nào khỏi chuỗi trong các cột nhất định
Trước tiên, hãy tạo một DataFrame mẫu mà chúng ta sẽ tham khảo trong suốt bài viết này để minh họa một vài khái niệm và giới thiệu cách đạt được kết quả mong muốn khi làm việc với các cột chuỗi
import pandas as pd
df = pd.DataFrame[
[
[1, '+9A', 100],
[2, '-1A', 121],
[3, '5B', 312],
[4, '+1D', 567],
[5, '+1C', 123],
[6, '-2E', 101],
[7, '+3T', 231],
[8, '5A', 769],
[9, '+5B', 907],
[10, '-1A', 15],
],
columns=['colA', 'colB', 'colC']
]
print[df]
colA colB colC
0 1 +9A 100
1 2 -1A 121
2 3 5B 312
3 4 +1D 567
4 5 +1C 123
5 6 -2E 101
6 7 +3T 231
7 8 5A 769
8 9 +5B 907
9 10 -1A 15
Và giả sử rằng chúng ta muốn chuyển đổi dữ liệu được lưu trữ dưới cột colB
sao cho tiền tố ký hiệu -/+
và các chữ cái hậu tố bị xóa
Sử dụng gấu trúc. Loạt. str. phương thức thay thế []
Phương pháp
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]0 có thể được sử dụng để thay thế mỗi lần xuất hiện của mẫu/biểu thức chính quy trong
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]1/
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]2
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
Trong ví dụ của chúng tôi, chúng tôi có thể chỉ định một biểu thức chính quy để thay thế tất cả các giá trị không phải là số thành một chuỗi trống. Do đó, biểu thức sau đây sẽ thực hiện thủ thuật
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
Đây chắc chắn là một trong nhiều tùy chọn mà bạn có thể có khi sử dụng cụm từ thông dụng. Tôi đoán bạn có thể trở nên khá sáng tạo nhưng biểu thức chính quy này phải là cách đơn giản nhất cho trường hợp sử dụng cụ thể của chúng tôi
Một tùy chọn khác sẽ hoạt động tốt cho trường hợp sử dụng của chúng tôi là loại bỏ bất kỳ ký tự không phải số nguyên nào
df['colB'].str.replace[r'[^0-9]', '']
Sử dụng gấu trúc. Loạt. str. phương pháp giải nén []
Một tùy chọn khác mà bạn có khi loại bỏ các phần không mong muốn khỏi chuỗi trong gấu trúc, là phương pháp
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]3 được sử dụng để trích xuất các nhóm chụp trong biểu thức chính quy dưới dạng các cột trong Khung dữ liệu
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
Trong ví dụ của chúng tôi, chúng tôi sẽ chỉ trích xuất các phần của chuỗi mà chúng tôi muốn giữ lại
df['colB'] = df['colB'].str.extract[r'[\d+]', expand=False]print[df]
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
Sử dụng gấu trúc. Loạt. phương thức thay thế []
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]4 là một phương pháp thay thế khác và khá giống với phương pháp đầu tiên mà chúng ta đã thảo luận trong hướng dẫn này. Phương thức này sẽ thay thế các giá trị được cung cấp trong
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]5 bằng giá trị và cũng cho phép người dùng chỉ định liệu giá trị được cung cấp cho
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]5 có nên được hiểu là biểu thức chính quy hay không
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].replace[r'\D', r'', regex=True]
Sử dụng phương thức map[]
Một tùy chọn khác là tận dụng phương pháp
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]7 có thể được sử dụng để ánh xạ các giá trị của pandas
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]1 theo một hàm hoặc ánh xạ đầu vào
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
Trong ví dụ cụ thể của chúng tôi, chúng tôi có thể sử dụng
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]9 để áp dụng hàm lambda loại bỏ
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'].str.replace[r'[^0-9]', '']
0 khỏi đầu chuỗi và bất kỳ ký tự ascii nào khỏi cuối chuỗifrom string import ascii_lettersdf['colB'] = \
df['colB'].map[lambda x: x.lstrip['+-'].rstrip[ascii_letters]]print[df]
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
Một lần nữa, bạn có thể khá sáng tạo khi làm việc với loại hoạt động này, vì vậy hãy thoải mái thử những gì hoạt động tốt nhất cho trường hợp sử dụng cụ thể của bạn
Bạn cũng có thể đọc thêm về các phương pháp của gấu trúc
df['colB'] = df['colB'].str.replace[r'\D', '']print[df]9,
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'].str.replace[r'[^0-9]', '']
2 và df['colB'].str.replace[r'[^0-9]', '']
3 trong một trong những bài báo gần đây của tôiáp dụng [] so với bản đồ [] so với áp dụng bản đồ [] trong Pandas
Thảo luận về sự khác biệt giữa apply[], map[] và applymap[] trong Python và Pandas
hướng tới khoa học dữ liệu. com
Sử dụng hiểu danh sách
Khi làm việc với DataFrames gấu trúc lớn, bạn phải luôn xem xét việc vector hóa vì điều này sẽ mang lại lợi ích lớn cho bất kỳ hoạt động nào được thực hiện về mặt hiệu quả
Hầu hết các lần, các hàm chuỗi có thể khó vector hóa và do đó chúng có thể được thực thi theo cách lặp [đây không phải là cách tiếp cận tốt nhất có thể có]
Một giải pháp thay thế tốt có khả năng giải quyết vấn đề này là hiểu danh sách. Ví dụ: thay vì
df['colB'].str.replace[r'[^0-9]', '']
4, chúng ta có thể sử dụng phương pháp df['colB'].str.replace[r'[^0-9]', '']
5 để hiểu danh sáchdf['colB'].str.replace[r'[^0-9]', '']
6Trả lại
df['colB'].str.replace[r'[^0-9]', '']
7 thu được bằng cách thay thế các lần xuất hiện mẫu không chồng chéo ngoài cùng bên trái trongdf['colB'].str.replace[r'[^0-9]', '']
7 bằng thay thếdf['colB'].str.replace[r'[^0-9]', '']
9. Nếu không tìm thấydf['colB'] = df['colB'].str.extract[r'[\d+]', expand=False]print[df]0, thì trả về
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15df['colB'].str.replace[r'[^0-9]', '']
7 không thay đổi.df['colB'].str.replace[r'[^0-9]', '']
9 có thể là một chuỗi hoặc một hàm;
import redf['colB'] = [re.sub['[^0-9]', '', x] for x in df['colB']]
Ngoài ra, phương pháp
df['colB'] = df['colB'].str.extract[r'[\d+]', expand=False]print[df]3 có thể được thể hiện dưới dạng hiểu danh sách bằng cách sử dụng
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
df['colB'] = df['colB'].str.extract[r'[\d+]', expand=False]print[df]4
colA colB colC
0 1 9 100
1 2 1 121
2 3 5 312
3 4 1 567
4 5 1 123
5 6 2 101
6 7 3 231
7 8 5 769
8 9 5 907
9 10 1 15
import redf['colB'] = [re.search['[0-9]', x][0] for x in df['colB']]
Suy nghĩ cuối cùng
Trong hướng dẫn ngắn ngày hôm nay, chúng ta đã thảo luận về cách bạn có thể xử lý DataFrames của gấu trúc để cắt bớt bất kỳ phần không mong muốn nào khỏi các cột chứa các đối tượng chuỗi
Lưu ý rằng khi áp dụng các phép biến đổi như vậy cho các Khung dữ liệu khá lớn, cần tính đến hiệu suất của từng phương pháp. Hiệu suất thường thay đổi tùy thuộc vào kích thước của DataFrame - ví dụ: một phương pháp có thể hiệu quả nhất khi áp dụng cho DataFrames nhỏ nhưng không hiệu quả khi áp dụng cho DataFrames lớn hơn
Do đó, sẽ luôn có lợi khi thử các phương pháp khác nhau và áp dụng phương pháp hiệu quả nhất cho trường hợp sử dụng cụ thể của bạn
Trở thành thành viên và đọc mọi câu chuyện trên Medium. Phí thành viên của bạn hỗ trợ trực tiếp cho tôi và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có toàn quyền truy cập vào mọi câu chuyện trên Phương tiện