2016-03-29 25 views
5

Tôi có khung dữ liệu gấu trúc sau. vì lợi ích của sự đơn giản, cho phép giả định nó chỉ có hai cột: idsearch_termtránh regex trong gấu trúc str.replace

id  search_term 
37651 inline switch 

tôi làm:

train['search_term'] = train['search_term'].str.replace("in."," in. ") 

mong rằng các số liệu trên là không bị ảnh hưởng, nhưng tôi nhận được để đổi lấy số liệu này :

id  search_term 
37651 in. in. switch 

có nghĩa inl được thay thế bằng in.ine là replac ed bởi in., như thể tôi đang sử dụng cụm từ thông dụng, trong đó dấu chấm có nghĩa là bất kỳ ký tự nào.

Làm thế nào để xác định lại lệnh đầu tiên do đó, theo nghĩa đen, in. được thay thế bằng in. nhưng bất kỳ in không theo sau bởi một dấu chấm là bị ảnh hưởng, như trong:

a = 'inline switch' 
a = a.replace('in.','in. ') 

a 
>>> 'inline switch' 
+0

bạn là gì thực tế kết quả mong muốn? –

+0

xin lỗi, tôi muốn thay thế 'dấu chấm' theo nghĩa đen. Tôi đã đăng câu trả lời dưới đây vì tôi đã tìm thấy một bài đăng tốt trên cụm từ thông dụng cho 'dấu chấm'. vấn đề là str.replace() trong một dataframe sử dụng regex –

Trả lời

1

Cố gắng thoát khỏi .:

import pandas as pd 

df = pd.DataFrame({'search_term': ['inline switch', 'in.here']}) 
>>> df.search_term.str.replace('in\\.', 'in. ') 
0 inline switch 
1   in. here 
Name: search_term, dtype: object 
+0

cảm ơn Ami. Tôi thấy bạn đã trốn thoát. trong đối số đầu tiên, nhưng còn về cái thứ hai thì sao? nếu bạn muốn thay thế 'in'. bởi 'in. 'sau đó bạn nên sử dụng str.replace (' trong \\. ',' trong \\. ') hoặc str.replace (' trong \\. ',' in. ')? –

+0

@AlejandroSimkievich Nó có vẻ hợp lý, nhưng không. Xem ví dụ được cập nhật ở trên. Chỉ dấu chấm trong chuỗi đầu tiên được hiểu là ký tự regex (phải được thoát). –

+0

cảm ơn rất nhiều Ami –

1

và đây là câu trả lời: biểu thức chính quy để khớp với dấu chấm.

str.replace() trong gấu trúc thực sự sử dụng regex, do đó:

df['a'] = df['a'].str.replace('in.', ' in. ') 

là không thể so sánh với:

a.replace('in.', ' in. ') 

sau này không sử dụng regex. Vì vậy, sử dụng '\.' thay vì '.' trong một tuyên bố sử dụng regex nếu bạn thực sự có nghĩa là dấu chấm và không phải bất kỳ ký tự nào.

Regular Expression to match a dot

+0

Lưu ý, tuy nhiên, bạn vẫn có thể sử dụng biểu thức regex, trong khi nói rằng một dấu chấm không có ý nghĩa đặc biệt. –

Các vấn đề liên quan