Làm cách nào để thay thế văn bản trong một cột của khung dữ liệu Pandas?


103

Tôi có một cột trong khung dữ liệu của mình như sau:

range
"(2,30)"
"(50,290)"
"(400,1000)"
... 

và tôi muốn thay thế ,dấu phẩy bằng dấu -gạch ngang. Tôi hiện đang sử dụng phương pháp này nhưng không có gì thay đổi.

org_info_exc['range'].replace(',', '-', inplace=True)

Ai có thể giúp đỡ?

Câu trả lời:


211

Sử dụng strphương pháp vectorised replace:

In [30]:

df['range'] = df['range'].str.replace(',','-')
df
Out[30]:
      range
0    (2-30)
1  (50-290)

BIÊN TẬP

Vì vậy, nếu chúng tôi xem xét những gì bạn đã thử và tại sao nó không hoạt động:

df['range'].replace(',','-',inplace=True)

từ các tài liệu, chúng tôi thấy mô tả này:

str hoặc regex: str: string khớp chính xác với to_replace sẽ được thay thế bằng giá trị

Vì vậy, bởi vì các giá trị str không khớp, không có thay thế nào xảy ra, hãy so sánh với các giá trị sau:

In [43]:

df = pd.DataFrame({'range':['(2,30)',',']})
df['range'].replace(',','-', inplace=True)
df['range']
Out[43]:
0    (2,30)
1         -
Name: range, dtype: object

ở đây chúng tôi nhận được một kết quả khớp chính xác trên hàng thứ hai và sự thay thế xảy ra.


40

Đối với bất kỳ ai khác đến đây từ Google tìm kiếm về cách thực hiện thay thế chuỗi trên tất cả các cột (ví dụ: nếu một cột có nhiều cột như cột 'phạm vi' của OP): Pandas có một replacephương thức tích hợp sẵn có trên một đối tượng khung dữ liệu.

df.replace(',', '-', regex=True)

Nguồn: Docs


2

Thay thế tất cả dấu phẩy bằng dấu gạch dưới trong tên cột

data.columns= data.columns.str.replace(' ','_',regex=True)

2

Ngoài ra, đối với những người muốn thay thế nhiều ký tự trong một cột, bạn có thể thực hiện bằng cách sử dụng biểu thức chính quy:

import re
chars_to_remove = ['.', '-', '(', ')', '']
regular_expression = '[' + re.escape (''. join (chars_to_remove)) + ']'

df['string_col'].str.replace(regular_expression, '', regex=True)

0

Nếu bạn chỉ cần thay thế các ký tự trong một cột cụ thể, bằng cách nào đó regex = True và tại chỗ = True đều không thành công, tôi nghĩ cách này sẽ hiệu quả:

data["column_name"] = data["column_name"].apply(lambda x: x.replace("characters_need_to_replace", "new_characters"))

lambda giống một hàm hoạt động giống như một vòng lặp for trong trường hợp này. x ở đây đại diện cho mọi mục nhập trong cột hiện tại.

Điều duy nhất bạn cần làm là thay đổi "column_name", "character_need_to_replace" và "new_characters".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.