Читання файлу з роздільниками табуляції за допомогою Pandas - працює на Windows, але не на Mac


91

Я без проблем читав файл даних, розділений табуляцією, у Windows за допомогою Pandas / Python. Файл даних містить примітки у перших трьох рядках, а потім слід із заголовком.

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

Зараз я намагаюся прочитати цей файл на своєму Mac. (Я вперше використовую Python на Mac.) Я отримую таку помилку.

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

Якщо встановити error_bad_lines аргумент для read_csv в Помилковий , я отримую наступну інформацію, яка триває до кінця останнього рядка.

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
...

Чи потрібно вказувати значення для аргументу кодування ? Здається, мені цього не потрібно було б робити, тому що читання файлу чудово працює в Windows.


Чи використовуєте ви однакову версію панд в обох ОС? Чи можете ви надати деякі зразки даних, що ілюструють проблему на Mac?
joris

не пов'язані: ви розумієте різницю між: (0)і (0,)в Python? Примітка: (0)є 0і (0,)є 0,- кома створює кортеж (крім порожнього), а не дужки.
jfs

Ви пробували df = pd.read_table(myfile, skiprows=[0,1,2], header=0)?
пропаганда

Привіт усім. Дякую за пропозиції. Я створив тимчасове рішення, але, можливо, доведеться переглянути це питання та шукати кращого рішення в майбутньому. Якщо і коли я це зроблю, я розгляну далі вашу пропозицію. Моїм тимчасовим рішенням було взяти файл CSV, який я мав (і раніше перетворив його на проблемний файл, розділений табуляцією за допомогою Excel), і зберегти його у форматі .tsv разом із документами Google. Я використовував Gdocs лише тому, що це був найзручніший додаток для документів, доступний мені на той час. Це перетворення спрацювало. Я вважаю, Пандас зміг правильно прочитати файл і перейти до решти мого коду.
user3062149

Я підозрюю, що проблема, яку ви тут бачите з вашим mac, - це лінійні термінатори. Електронні таблиці, створені на mac, можуть спричинити всілякі цікаві способи поведінки з різними бібліотеками, включаючи бібліотеку csv_reader у python
brad sanders

Відповіді:


146

Найбільший підказка - це те, що всі рядки повертаються в один рядок. Це означає, що термінатори лінії ігноруються або відсутні.

Ви можете вказати термінатор рядка для csv_reader. Якщо ви використовуєте mac, створені рядки закінчуватимуться \rне стандартом linux, \nа ще краще підтяжками та поясом для Windows \r\n.

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

Ви також можете відкрити всі свої дані за допомогою пакета кодеків. Це може підвищити надійність за рахунок швидкості завантаження документів.

import codecs

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

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

3
Мені допоміг доданий фрагмент кодека. Потім я зрозумів, що в read_csv є параметр, який робить те саме. Я додав encoding = 'utf-16', і це вирішило проблему для мене.
Михайло Венков

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.