Các ký hiệu 'b' trước một chuỗi được sử dụng để khai báo chuỗi cụ thể dưới dạng chuỗi byte. Chuỗi byte không là gì ngoài một mảng byte bao gồm các số nguyên trong khoảng từ 0 đến 255. Mặt khác, một chuỗi ký tự chỉ đơn giản là một dãy ký tự
Trong Python phiên bản 2 trở xuống, tiền tố b thường bị bỏ qua. Tuy nhiên, trong phiên bản 3, cùng một khởi tạo/chỉ định một đối tượng byte thay vì một đối tượng chuỗi thông thường
Bạn có thể hiểu như vậy bằng cách nhìn vào phần trình diễn dưới đây
string1 = 'CodeSpeedy' print(type(string1)) string2 = b'CodeSpeedyl' print(type(string2))<class 'str'> <class 'bytes'>Do đó, mặc dù cả hai chuỗi có vẻ giống nhau, nhưng kiểu dữ liệu của chúng khác nhau
Đây là một minh họa khác trong đó chúng tôi cung cấp một chuỗi ký tự làm đầu vào và sau đó chuyển đổi nó thành một chuỗi byte
Sử dụng phương thức bytes.decode() để xóa tiền tố b khỏi đối tượng byte bằng cách chuyển đổi nó thành chuỗi. Phương thức decode() sẽ trả về một chuỗi được giải mã từ đối tượng byte đã cho và sẽ xóa tiền tố b
Các đối tượng byte luôn có tiền tố là b'', vì vậy để loại bỏ tiền tố, chúng ta phải chuyển đổi các byte thành một chuỗi
Phương thức trả về một chuỗi được giải mã từ các byte đã cho. Mã hóa mặc định là utf-8
Ngược lại, phương thức trả về một phiên bản được mã hóa của chuỗi dưới dạng đối tượng byte. Mã hóa mặc định là utf-8
Mã hóa là quá trình chuyển đổi một đối tượng string thành một đối tượng bytes và giải mã là quá trình chuyển đổi một đối tượng bytes thành một đối tượng string
Nói cách khác, bạn có thể sử dụng phương pháp b1 để đi từ b2 đến bytes và bytes.decode() để đi từ bytes đến b2
Ngoài ra, bạn có thể sử dụng lớp b7
Xóa tiền tố 'b' khỏi chuỗi bằng str()
Sử dụng lớp b7 để xóa tiền tố b khỏi đối tượng bytes, e. g. decode()0. Lớp b7 sẽ loại bỏ tiền tố b bằng cách chuyển đổi đối tượng bytes thành một chuỗi
Lớp trả về một phiên bản chuỗi của đối tượng đã cho. Nếu một đối tượng không được cung cấp, lớp sẽ trả về một chuỗi rỗng
Cú pháp sử dụng lớp là như nhau. Lớp trả về một đối tượng bytes, vì vậy tiền tố b được thêm vào
Chúng tôi đã sử dụng mã hóa utf-8 trong các ví dụ. Mã hóa utf-8 có khả năng mã hóa hơn một triệu điểm mã ký tự hợp lệ bằng Unicode
Bạn có thể xem tất cả các mã hóa tiêu chuẩn trong tài liệu chính thức
Một số mã hóa phổ biến là decode()6, decode()7 và decode()8
Khi giải mã một đối tượng byte, chúng ta phải sử dụng cùng một bảng mã đã được sử dụng để mã hóa chuỗi thành một đối tượng byte
Nếu vì một lý do nào đó, bạn cần xóa tiền tố b theo cách khó hiểu, hãy thử sử dụng hàm b0 với tính năng cắt chuỗi
Hàm trả về biểu diễn chuỗi chuẩn của đối tượng
Khi chúng ta đã chuyển đổi đối tượng byte thành chuỗi, chúng ta có thể sử dụng tính năng cắt chuỗi để xóa tiền tố b
Cú pháp cắt chuỗi là b2
Chỉ số b3 là bao gồm, trong khi chỉ số b4 là loại trừ (tối đa, nhưng không bao gồm)
Các chỉ mục của Python dựa trên số 0, vì vậy ký tự đầu tiên trong chuỗi có chỉ số là b5 và ký tự cuối cùng có chỉ số là b6 hoặc b7
Slice b8 bắt đầu tại chỉ mục b9 và đi lên, nhưng không bao gồm ký tự cuối cùng trong chuỗi
Deepanshu thành lập ListenData với một mục tiêu đơn giản - Làm cho các phân tích trở nên dễ hiểu và dễ theo dõi. Ông có hơn 10 năm kinh nghiệm trong lĩnh vực khoa học dữ liệu. Trong nhiệm kỳ của mình, ông đã làm việc với các khách hàng toàn cầu trong nhiều lĩnh vực khác nhau như Ngân hàng, Bảo hiểm, Cổ phần tư nhân, Viễn thông và Nhân sự
Để xóa các ký tự khỏi các cột trong Pandas DataFrame, hãy sử dụng phương thức replace(~)
Hãy xem xét DataFrame sau
Để xóa tất cả chuỗi con "a" khỏi cột A
Để xóa tất cả các chuỗi con "a" hoặc "b"
Ở đây, [ab] là biểu thức chính quy và khớp với bất kỳ ký tự nào là a hoặc b
Để xóa các chuỗi con khỏi Pandas DataFrame, vui lòng tham khảo công thức của chúng tôi tại đây
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 số 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 pddf = 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 các ký hiệu tiền tố -/+ 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 150 có thể được sử dụng để thay thế từng 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 151/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 152
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 153 đượ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 154 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 155 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 155 có nên được hiểu là biểu thức chính quy hay không
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 157 có thể được sử dụng để ánh xạ 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 151 theo ánh xạ đầu vào hoặc chức năng
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 159 để á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
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 159, 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 thức df['colB'].str.replace(r'[^0-9]', '')5 để hiểu danh sách
import redf['colB'] = [re.sub('[^0-9]', '', x) for x in df['colB']]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 ___9_______0, ________7___7 được trả về 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;
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 153 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 154
Suy nghĩ cuối cùng
Trong hướng dẫn ngắn hôm nay, chúng tôi đã 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