Xóa khung dữ liệu b python

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 bytesbytes.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 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 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 15
0 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 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ạ 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 á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 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 thức
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 ___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;

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