Xóa các ký hiệu khỏi python khung dữ liệu

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]
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
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
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
1/
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
2

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]
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
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

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]
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
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
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
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
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
5 có nên được hiểu là biểu thức chính quy hay không

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]
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
7 có thể được sử dụng để ánh xạ các giá trị của pandas
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
1 theo một hàm hoặc ánh xạ đầu vào

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]
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
9 để áp dụng hàm lambda loại bỏ
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ỗi

from 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]
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
9,
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ách

df['colB'].str.replace[r'[^0-9]', '']
6

Trả 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 trong
df['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ấy
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
0, thì trả về
df['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]
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
3 có thể được thể hiện dưới dạng hiểu danh sách bằng cách sử dụng
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
4

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

Chủ Đề