2015-01-12 13 views
24

Tôi đã đọc một tệp dữ liệu được phân định trong Windows với Pandas/Python mà không cần bất kỳ vấn đề. Tệp dữ liệu chứa các ghi chú trong ba dòng đầu tiên và sau đó đi kèm với một tiêu đề.Reading tab-delimited file với Pandas - hoạt động trên Windows, nhưng không phải trên Mac

df = pd.read_csv(myfile,sep='\t',skiprows=(0,1,2),header=(0)) 

Tôi hiện đang cố gắng đọc tệp này bằng máy Mac của mình. (Lần đầu tiên tôi sử dụng Python trên máy Mac.) Tôi nhận được lỗi sau.

pandas.parser.CParserError: Error tokenizing data. C error: Expected 1 
fields in line 8, saw 39 

Nếu thiết lập error_bad_lines luận cho read_csv-False, tôi nhận được thông tin sau đây, mà vẫn tiếp tục cho đến cuối dòng cuối cùng.

Skipping line 8: expected 1 fields, saw 39 
Skipping line 9: expected 1 fields, saw 125 
Skipping line 10: expected 1 fields, saw 125 
Skipping line 11: expected 1 fields, saw 125 
Skipping line 12: expected 1 fields, saw 125 
Skipping line 13: expected 1 fields, saw 125 
Skipping line 14: expected 1 fields, saw 125 
Skipping line 15: expected 1 fields, saw 125 
Skipping line 16: expected 1 fields, saw 125 
Skipping line 17: expected 1 fields, saw 125 
... 

Tôi có cần chỉ định giá trị cho đối số mã hóa không? Có vẻ như tôi không cần phải đọc vì tệp này hoạt động tốt trên Windows.

+0

Bạn đang sử dụng phiên bản chính xác của gấu trúc trên cả hai hệ điều hành? Bạn có thể cung cấp một số dữ liệu mẫu minh họa sự cố trên máy Mac không? – joris

+0

không liên quan: bạn có hiểu sự khác biệt giữa: '(0)' và '(0,)' trong Python không? Lưu ý: '(0)' là '0' và' (0,) 'là' 0, '- dấu phẩy tạo một tuple (ngoại trừ một dấu trống), không phải dấu ngoặc đơn. – jfs

+0

Bạn đã thử 'df = pd.read_table (myfile, skiprows = [0,1,2], header = 0)'? – pbreach

Trả lời

26

Các đầu mối lớn nhất là các hàng đều được trả lại trên cùng một dòng. Điều này cho thấy các thuật ngữ dòng đang bị bỏ qua hoặc không có mặt.

Bạn có thể chỉ định các dòng terminator cho csv_reader. Nếu bạn đang sử dụng máy Mac, các đường được tạo sẽ kết thúc bằng \r chứ không phải là tiêu chuẩn linux \n hoặc vẫn tốt hơn các bộ phận treo và tiếp cận vành đai của cửa sổ với \r\n.

pandas.read_csv(filename, sep='\t', lineterminator='\r') 

Bạn cũng có thể mở tất cả dữ liệu của mình bằng gói codec. Điều này có thể làm tăng sự mạnh mẽ với chi phí của tốc độ tải tài liệu.

import codecs 

doc = codecs.open('document','rU','UTF-16') #open for reading with "universal" type set 

df = pandas.read_csv(doc, sep='\t') 
+0

Việc thêm mã codec đã giúp tôi. Sau đó, tôi nhận ra có một paramter trong read_csv mà làm như vậy. Tôi đã thêm mã hóa = 'utf-16' và nó đã khắc phục sự cố cho tôi. –

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