2016-03-17 35 views
7

Tôi đang cố gắng xóa một số Dữ liệu mà tôi có từ tệp excel. Tệp chứa 7400 hàng và 18 cột, bao gồm danh sách khách hàng có địa chỉ và dữ liệu khác của họ. Vấn đề mà tôi đang gặp phải là một số thành phố bị viết sai chính tả làm sai lệch thông tin và gây khó khăn cho việc xử lý tiếp theo.Pandas thay thế nhiều giá trị cùng một lúc

SURNAME | ADDRESS   | CITY 
0 Jenson | 252 Des Chênes | D.DO 
1 Jean  | 236 Gouin  | DOLLARD 
2 Denis  | 993 Boul. Gouin | DOLLARD-DES-ORMEAUX 
3 Bradford | 1690 Dollard #7 | DDO 
4 Alisson | 115 Du Buisson | IL PERROT 
5 Abdul  | 9877 Boul. Gouin | Pierrefonds 
6 O'Neil | 5 Du College  | Ile Bizard 
7 Bundy  | 7345 Sherbrooke | ILLE Perot 
8 Darcy  | 8671 Anthony #2 | ILE Perrot 
9 Adams  | 845 Georges  | Pierrefonds 

Trong ví dụ trên D.DO, Dollard, DDO phải được viết Dollard-DES-Ormeaux và IL Perrot, Ille Perot, Ile Perrot phải được viết Ile-Perrot.

tôi đã có thể thay thế các giá trị sử dụng:

df["CITY"].replace(to_replace={"D.DO", "DOLLARD", "DDO"}, value="DOLLARD-DES-ORMEAUX", regex=True) 
df["CITY"].replace(to_replace={"IL PERROT", "ILLE PEROT", "ILE PERROT"}, value="ILE-PERROT", regex=True) 

Có một số cách kết hợp các hoạt động trên vào một? Tôi đã thử:

df["CITY"].replace({to_replace={"D.DO", "DOLLARD", "DDO"}, value="DOLLARD-DES-ORMEAUX", to_replace={"IL PERROT", "ILLE PEROT", "ILE PERROT"}, value="ILE-PERROT"}, regex=True) 

nhưng tôi đã không có may mắn

Trả lời

8

thử .replace({}, regex=True) phương pháp:

replacements = { 
    'CITY': { 
     r'(D.*DO|DOLLARD.*)': 'DOLLARD-DES-ORMEAUX', 
     r'I[lL]*[eE]*.*': 'ILLE Perot'} 
} 

df.replace(replacements, regex=True, inplace=True) 

print(df) 

Output:

SURNAME   ADDRESS     CITY 
0 Jenson 252 Des Chênes DOLLARD-DES-ORMEAUX 
1  Jean   236 Gouin DOLLARD-DES-ORMEAUX 
2  Denis 993 Boul. Gouin DOLLARD-DES-ORMEAUX 
3 Bradford 1690 Dollard #7 DOLLARD-DES-ORMEAUX 
4 Alisson 115 Du Buisson   ILLE Perot 
5  Abdul 9877 Boul. Gouin   Pierrefonds 
6 O'Neil  5 Du College   ILLE Perot 
7  Bundy 7345 Sherbrooke   ILLE Perot 
8  Darcy 8671 Anthony #2   ILLE Perot 
9  Adams  845 Georges   Pierrefonds 
2

Bạn có thể tạo ra một từ điển của thay thế và sau đó lặp qua chúng, sử dụng 'loc' để thay thế.

target_for_values = { 
    'DOLLARD-DES-ORMEAUX': ['D.DO', 'DOLLARD', 'DDO'], 
    'ILE-PERROT': ['IL PERROT', 'ILLE PEROT', 'ILE PERROT']} 

for k, v in target_for_values.iteritems(): 
    df.loc[df.CITY.str.upper().isin(v), 'CITY'] = k 

>>> df.CITY 
        CITY 
0     C.DO 
1 DOLLARD-DES-ORMEAUX 
2 DOLLARD-DES-ORMEAUX 
3 DOLLARD-DES-ORMEAUX 
4   ILE-PERROT 
5   Pierrefonds 
6   Ile Bizard 
7   ILE-PERROT 
8   ILE-PERROT 
9   Pierrefonds 
Các vấn đề liên quan