Đọc tệp được phân cách bằng tab bằng Pandas - hoạt động trên Windows, nhưng không hoạt động trên Mac


92

Tôi đã đọc tệp dữ liệu được phân tách bằng tab trong Windows bằng Pandas / Python mà không gặp bất kỳ sự cố nào. Tệp dữ liệu chứa ghi chú trong ba dòng đầu tiên và sau đó là tiêu đề.

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

Hiện tôi đang cố đọ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 Mac.) Tôi gặp lỗi sau.

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

Nếu đặt đối số error_bad_lines cho read_csv thành False , tôi nhận được thông tin sau, thông tin này tiếp tục cho đến cuối hà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 nên làm vậy vì đọc tệp hoạt động tốt trên Windows.


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

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

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

Chào mọi người. Cảm ơn vì những gợi ý. Tôi đã đưa ra một giải pháp tạm thời nhưng có thể cần phải xem lại vấn đề này và tìm kiếm giải pháp tốt hơn trong tương lai. Nếu và khi nào tôi thực hiện, tôi sẽ xem xét thêm đề xuất của bạn. Giải pháp tạm thời của tôi là lấy tệp csv mà tôi có (và trước đó đã chuyển đổi sang tệp được phân tách bằng tab có vấn đề bằng Excel) và lưu nó dưới dạng .tsv bằng Google docs. Tôi chỉ sử dụng Gdocs vì nó là ứng dụng doc thuận tiện nhất cho tôi vào thời điểm đó. Chuyển đổi này đã hoạt động. Tôi tin rằng gấu trúc đã có thể đọc chính xác tệp và chuyển sang phần còn lại của mã của tôi.
user3062149

Tôi nghi ngờ vấn đề bạn đang gặp ở đây với máy mac của bạn là các đầu cuối dòng. Bảng tính được thực hiện trên một mac có thể gây ra tất cả các loại hành vi vui vẻ với các thư viện khác nhau, bao gồm các lib csv_reader trong python
brad sanders

Câu trả lời:


147

Đầu mối lớn nhất là các hàng đều được trả về trên một dòng. Điều này cho biết các kết thúc dòng đang bị bỏ qua hoặc không có mặt.

Bạn có thể chỉ định trình kết thúc dòng cho csv_reader. Nếu bạn đang sử dụng mac, các dòng được tạo sẽ kết thúc bằng \rthay vì tiêu chuẩn linux \nhoặc tốt hơn vẫn là hệ thống treo và cách 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 cách sử dụng gói codec. Điều này có thể làm tăng tính mạnh mẽ với chi phí là 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')

3
Việc thêm đoạn mã codec đã giúp tôi. Sau đó, tôi nhận ra có một tham số trong read_csv hoạt động tương tự. Tôi đã thêm encoding = 'utf-16' và nó đã khắc phục sự cố cho tôi.
Mikhail Venkov

4

Một tùy chọn khác sẽ là thêm engine='python'vào lệnhpandas.read_csv(filename, sep='\t', engine='python')

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.