2014-09-06 28 views
26

Tôi có một khung dữ liệu gấu trúc với khoảng 20 cột.Thay thế tất cả các lần xuất hiện của một chuỗi trong một khung dữ liệu gấu trúc (Python)

Có thể thay thế tất cả các lần xuất hiện của một chuỗi (ở đây một dòng mới) bằng cách thủ công bằng văn bản tất cả các tên cột:

df['columnname1'] = df['columnname1'].str.replace("\n","<br>") 
df['columnname2'] = df['columnname2'].str.replace("\n","<br>") 
df['columnname3'] = df['columnname3'].str.replace("\n","<br>") 
... 
df['columnname20'] = df['columnname20'].str.replace("\n","<br>") 

này tiếc là không làm việc:

df = df.replace("\n","<br>") 

Có khác , giải pháp thanh lịch hơn?

Trả lời

56

Bạn có thể sử dụng replace và vượt qua chuỗi để tìm/thay thế như từ điển phím/mục:

df.replace({'\n': '<br>'}, regex=True) 

Ví dụ:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']}) 
>>> df 
    a b 
0 1\n 4\n 
1 2\n 5 
2 3 6\n 

>>> df.replace({'\n': '<br>'}, regex=True) 
    a  b 
0 1<br> 4<br> 
1 2<br> 5 
2 3  6<br> 
+0

Điều này không hiệu quả đối với tôi! Phiên bản Pandas '0.15.1', ​​python 2.7.9, Ubuntu 14.04. –

+1

'Python 2.7.9 | Anaconda 2.1.0 (64 bit) | (mặc định, ngày 9 tháng 3 năm 2015, 16:20:48) [GCC 4.4.7 20120313 (Mũ đỏ 4.4.7-1)] trên linux2 Nhập "trợ giúp", "bản quyền", "tín dụng" hoặc "giấy phép" cho thêm thông tin. Anaconda được mang đến cho bạn bởi Continuum Analytics. Vui lòng xem: http://continuum.io/thanks và https://binstar.org >>> nhập gấu trúc làm pd >>> df = pd.DataFrame ({'a': ['1 \ n ',' 2 \ n ',' 3 '],' b ': [' 4 \ n ',' 5 ',' 6 \ n ']}) >>> df ab 0 1 \ n 4 \ n 1 2 \ n 5 2 3 6 \ n >>> df.replace ({ '\ n': '
'}) ab 0 1 \ n 4 \ n 1 2 \ n 5 2 3 6 \ n >>> ' –

+0

Cảm ơn bạn đã chỉ ra điều này, @YichuanWang. –

9

Dường như gấu trúc có thay đổi API của nó để tránh sự nhập nhằng khi xử lý regex. Bây giờ bạn nên sử dụng:

df.replace({'\n': '<br>'}, regex=True) 

Ví dụ:

>>> df = pd.DataFrame({'a': ['1\n', '2\n', '3'], 'b': ['4\n', '5', '6\n']}) 
>>> df 
    a b 
0 1\n 4\n 
1 2\n 5 
2 3 6\n 

>>> df.replace({'\n': '<br>'}, regex=True) 
    a  b 
0 1<br> 4<br> 
1 2<br> 5 
2 3  6<br> 
+5

Bạn cũng có thể sử dụng "inplace = True" để tránh tạo bản sao - http: //pandas.pydata. org/pandas-docs/stable/generated/pandas.DataFrame.replace.html –

0

này sẽ loại bỏ tất cả các dòng mới và không gian hưởng ứng nhiệt liệt. Bạn có thể chỉnh sửa '' .join để chỉ định ký tự thay thế

df['columnname'] = [''.join(c.split()) for c in df['columnname'].astype(str)] 
Các vấn đề liên quan