2015-07-10 26 views
16

Tôi đã xóa 400 tệp excel và đọc chúng thành python bằng cách sử dụng gấu trúc và nối tất cả dữ liệu thô vào một tệp lớn df.Lỗi mã hóa Unicode khi viết gấu trúc df vào csv

Sau đó, khi tôi cố gắng để xuất khẩu nó vào một csv:

df.to_csv("path",header=True,index=False) 

tôi nhận được lỗi này:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 20: ordinal not in range(128) 

Ai đó có thể đề nghị một cách để sửa lỗi này và ý nghĩa của nó?

Cảm ơn

+0

Vui lòng cho biết nếu bạn đang sử dụng python 2 hoặc 3, hai mã này xử lý Unicode rất khác nhau. Sau đó đọc [Unicode howto] (https://docs.python.org/3/howto/unicode.html), nó cung cấp một nền tảng tốt cho lỗi này. Những vấn đề này không khó giải quyết, nhưng bạn phải biết những điều cơ bản trước. – roeland

+0

Tôi đang sử dụng python 2 –

+0

https://docs.python.org/2.7/howto/unicode.html – marbel

Trả lời

31

Bạn có unicode giá trị trong DataFrame của mình. Các tệp lưu trữ byte, có nghĩa là tất cả unicode phải được mã hóa thành byte trước khi chúng có thể được lưu trữ trong một tệp. Bạn phải chỉ định mã hóa, chẳng hạn như utf-8. Ví dụ,

df.to_csv('path', header=True, index=False, encoding='utf-8') 

Nếu bạn không chỉ định một mã hóa, sau đó mã hóa được sử dụng bởi mặc định là df.to_csvascii trong python2, hoặc utf-8 trong Python3.

6

Thêm một câu trả lời để giúp bản thân mình google nó sau:

Một mẹo nhỏ mà đã giúp tôi là để mã hóa một loạt vấn đề đầu tiên, sau đó giải mã nó trở lại utf-8. Giống như:

df['crumbs'] = df['crumbs'].map(lambda x: x.encode('unicode-escape').decode('utf-8')) 

Điều này cũng sẽ nhận được khung dữ liệu để in chính xác.

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