Hướng dẫn python replace special characters in column - python thay thế các ký tự đặc biệt trong cột

Các tài liệu trên

dictionary = {u'í': 'i', u'á': 'a'}
9 nói rằng bạn phải cung cấp một từ điển lồng nhau: Cấp độ đầu tiên là tên cột mà bạn phải cung cấp từ điển thứ hai với các cặp thay thế.nested dictionary: the first level is the column name for which you have to provide a second dictionary with substitution pairs.

Vì vậy, điều này sẽ hoạt động:

>>> df=pd.DataFrame({'a': ['NÍCOLAS','asdč'], 'b': [3,4]})
>>> df
         a  b
0  NÍCOLAS  3
1     asdč  4

>>> df.replace({'a': {'č': 'c', 'Í': 'I'}}, regex=True)
         a  b
0  NICOLAS  3
1     asdc  4

Chỉnh sửa. Có vẻ như

dictionary = {'í': 'i', 'á': 'a'}
0 cũng chấp nhận từ điển dịch không được lồng. Trong trường hợp đó, vấn đề có thể là với mã hóa ký tự, đặc biệt nếu bạn sử dụng Python 2. Giả sử hàm tải CSV của bạn đã giải mã các ký tự tệp (như các điểm mã unicode thực sự), thì bạn nên chăm sóc từ điển dịch/thay thế của bạn cũng được xác định với các ký tự Unicode, như thế này: Seems
dictionary = {'í': 'i', 'á': 'a'}
0 also accepts non-nested translation dictionary. In that case, the problem is probably with character encoding, particularly if you use Python 2. Assuming your CSV load function decoded the file characters properly (as true Unicode code-points), then you should take care your translation/substitution dictionary is also defined with Unicode characters, like this:

dictionary = {u'í': 'i', u'á': 'a'}

Nếu bạn có một định nghĩa như thế này (và sử dụng Python 2):

dictionary = {'í': 'i', 'á': 'a'}

Sau đó, các phím thực tế trong từ điển đó là các chuỗi multibyte. Mà byte (ký tự) chúng phụ thuộc vào mã hóa ký tự tệp thực tế được sử dụng, nhưng giả sử bạn sử dụng UTF-8, bạn sẽ nhận được:

dictionary = {'\xc3\xa1': 'a', '\xc3\xad': 'i'}

Và điều đó sẽ giải thích tại sao

dictionary = {'í': 'i', 'á': 'a'}
0 không thay thế các ký tự đó. Vì vậy, hãy chắc chắn sử dụng các chữ unicode trong Python 2:
dictionary = {'í': 'i', 'á': 'a'}
2.

Mặt khác, trong Python 3, tất cả các chuỗi đều là chuỗi unicode và bạn không phải sử dụng tiền tố

dictionary = {'í': 'i', 'á': 'a'}
3 (thực tế là loại ____24 từ Python 2 được đổi tên thành
dictionary = {'í': 'i', 'á': 'a'}
5 trong Python 3, và
dictionary = {'í': 'i', 'á': 'a'}
5 cũ từ Python 2 là Bây giờ
dictionary = {'í': 'i', 'á': 'a'}
7 trong Python 3).

Dưới đây là hai cách để thay thế các ký tự trong các chuỗi trong Pandas DataFrame:

(1) Thay thế ký tự/s trong một cột DataFrame duy nhất:

df['column name'] = df['column name'].str.replace('old character','new character')

(2) Thay thế ký tự/s trong toàn bộ DataFrame:

df = df.replace('old character','new character', regex=True)

Trong hướng dẫn ngắn này, bạn sẽ thấy cách thay thế:

  • Ký tự cụ thể trong một cột DataFrame
  • Ký tự cụ thể trong toàn bộ khung dữ liệu
  • Trình tự các ký tự

Thay thế một ký tự cụ thể trong một cột DataFrame duy nhất

Hãy để tạo ra một khung dữ liệu đơn giản với hai cột có chứa chuỗi:

import pandas as pd

colors = {'first_set':  ['aa_bb','cc_dd','ee_ff','gg_hh'],
          'second_set': ['ii_jj','kk_ll','mm_nn','oo_pp']
         }

df = pd.DataFrame(colors, columns= ['first_set','second_set'])

print (df)

Đây là cách mà DataFrame sẽ như thế nào:

  first_set   second_set
0     aa_bb        ii_jj
1     cc_dd        kk_ll
2     ee_ff        mm_nn
3     gg_hh        oo_pp

Mục tiêu là thay thế ký tự dấu gạch dưới (_ _ _) bằng ký tự ống (|first_set‘ column.

Để đạt được mục tiêu này, bạn sẽ cần thêm cú pháp sau vào mã:

df['first_set'] = df['first_set'].str.replace('_','|')

Vì vậy, mã Python hoàn chỉnh để thực hiện thay thế như sau:

import pandas as pd

colors = {'first_set':  ['aa_bb','cc_dd','ee_ff','gg_hh'],
          'second_set': ['ii_jj','kk_ll','mm_nn','oo_pp']
         }

df = pd.DataFrame(colors, columns= ['first_set','second_set'])

df['first_set'] = df['first_set'].str.replace('_','|')

print (df)

Như bạn có thể thấy, ký tự dấu gạch dưới đã được thay thế bằng một ký tự ống dưới cột ‘First_set,:

dictionary = {u'í': 'i', u'á': 'a'}
0

Thay thế một ký tự cụ thể trong toàn bộ khung dữ liệu

Điều gì sẽ xảy ra nếu bạn muốn thay thế một ký tự cụ thể trong toàn bộ khung dữ liệu?

Ví dụ, hãy để thay thế ký tự dấu gạch dưới bằng một ký tự ống dưới toàn bộ khung dữ liệu.

Trong trường hợp đó, bạn sẽ cần phải áp dụng cú pháp sau:

dictionary = {u'í': 'i', u'á': 'a'}
1

Bây giờ, bạn sẽ thấy rằng ký tự dấu gạch dưới đã được thay thế bằng một ký tự ống dưới toàn bộ khung dữ liệu (dưới cả hai cột ‘First_set, và các cột‘ Second_set,):

dictionary = {u'í': 'i', u'á': 'a'}
2

Thay thế một chuỗi các ký tự

Hãy nói rằng bạn muốn thay thế một chuỗi các ký tự trong Pandas DataFrame.

Chẳng hạn, giả sử rằng bạn đã tạo một khung dữ liệu mới trong đó bạn muốn thay thế trình tự của _yz_yz_iêu bằng hai đường ống | |

Dưới đây là cú pháp để tạo DataFrame mới:

dictionary = {u'í': 'i', u'á': 'a'}
3

Và đây là cách mà DataFrame mới sẽ trông như thế nào:

dictionary = {u'í': 'i', u'á': 'a'}
4

Sau đó, bạn có thể sử dụng mã sau để thay thế trình tự của _xyz_, bằng cách thức | |Trong cột ‘First_set,:

dictionary = {u'í': 'i', u'á': 'a'}
5

Bây giờ bạn sẽ thấy các ký tự mới được thay thế trong cột ‘First_set,:

dictionary = {u'í': 'i', u'á': 'a'}
6

Ngoài ra, bạn có thể áp dụng mã bên dưới để thực hiện các thay đổi trong toàn bộ DataFrame:

dictionary = {u'í': 'i', u'á': 'a'}
7

Đây là kết quả:

dictionary = {u'í': 'i', u'á': 'a'}
8

Bạn có thể tìm hiểu thêm về df.replace bằng cách truy cập tài liệu gấu trúc.