Pandas: read_csv C-engine CParserError: ошибка Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 22 сСнт. 2015  Β·  15ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: pandas-dev/pandas

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,

Π― столкнулся с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρƒ C-Engine read_csv Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π― Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Π² Ρ‡Π΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½ΠΎ я сузил Π΅Π΅ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» Π² Dropbox . Если Ρƒ вас Π΅ΡΡ‚ΡŒ рассол, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

df = pd.read_pickle('faulty_row.pkl')
df.to_csv('faulty_row.csv', encoding='utf8', index=False)
df.read_csv('faulty_row.csv', encoding='utf8')

Π£ мСня ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

CParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.

Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ CSV с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΈΠΆΠΊΠ° python, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚:

df.read_csv('faulty_row.csv', encoding='utf8', engine='python')

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с read_csv, Π° Π½Π΅ с to_csv. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вСрсии:

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.10.final.0
python-bits: 64
OS: Linux
OS-release: 3.19.0-28-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_GB.UTF-8

pandas: 0.16.2
nose: 1.3.7
Cython: 0.22.1
numpy: 1.9.2
scipy: 0.15.1
IPython: 3.2.1
patsy: 0.3.0
tables: 3.2.0
numexpr: 2.4.3
matplotlib: 1.4.3
openpyxl: 1.8.5
xlrd: 0.9.3
xlwt: 1.0.0
xlsxwriter: 0.7.3
lxml: 3.4.4
bs4: 4.3.2
Bug IO CSV Needs Info

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― пропустил ΠΎΡ‚Π²Π΅Ρ‚ @alfonsomhc, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ выглядСл ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

Π’Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ

df = pd.read_csv('test.csv', engine='python')

ВсС 15 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°ΡˆΠ° прСдпослСдняя строка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Ρ‹Π² '\r' . Π― Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это ошибка, Π½ΠΎ ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π½ΠΎΠ²ΠΎΠΉ строки.

pd.read_csv(open('test.csv','rU'), encoding='utf-8', engine='c')

Π― Ρ‚ΠΎΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ с этой ошибкой. ИспользованиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ @ chris-b1, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

Traceback (most recent call last):
  File "C:/Users/je/Desktop/Python/comparison.py", line 30, in <module>
    encoding='utf-8', engine='c')
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 498, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 275, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 590, in __init__
    self._make_engine(self.engine)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 731, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "C:\Program Files\Python 3.5\lib\site-packages\pandas\io\parsers.py", line 1103, in __init__
    self._reader = _parser.TextReader(src, **kwds)
  File "pandas\parser.pyx", line 515, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:4948)
  File "pandas\parser.pyx", line 705, in pandas.parser.TextReader._get_header (pandas\parser.c:7386)
  File "pandas\parser.pyx", line 829, in pandas.parser.TextReader._tokenize_rows (pandas\parser.c:8838)
  File "pandas\parser.pyx", line 1833, in pandas.parser.raise_parser_error (pandas\parser.c:22649)
pandas.parser.CParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.

+1

Π― Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ большого Ρ„Π°ΠΉΠ»Π° csv с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ egine ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ engine = 'python', ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.

Π― пропустил ΠΎΡ‚Π²Π΅Ρ‚ @alfonsomhc, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ выглядСл ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

Π’Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ

df = pd.read_csv('test.csv', engine='python')

Π±Ρ‹Π»Π° такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ, Π° Π½Π΅ Ρ„Π°ΠΉΠ» csv

ΠšΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ исслСдовал эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? Π­Ρ‚ΠΎ ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ использовании read_csv Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ keras.

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ исходныС Π΄Π°Π½Π½Ρ‹Π΅ большС нСдоступны, поэтому ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ воспроизводится. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСясно, Π² Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½ΠΎ @dgrahn ΠΈΠ»ΠΈ ΠΊΡ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅, Ссли Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ воспроизводимый ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ снова ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ

@WillAyd Π”Π°ΠΉΡ‚Π΅ ΠΌΠ½Π΅ Π·Π½Π°Ρ‚ΡŒ, Ссли Π²Π°ΠΌ понадобится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ GitHub Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ CSV, я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π° .txt.
Π’ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

for chunk in pandas.read_csv('debug.csv', chunksize=1000, names=range(2504)):
    pass

Π’ΠΎΡ‚ Ρ„Π°ΠΉΠ»: debug.txt

Π’ΠΎΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Windows 10 с использованиСм Anaconda.

Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>> for chunk in pandas.read_csv('debug.csv', chunksize=1000, names=range(2504)): pass
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\programs\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1007, in __next__
    return self.get_chunk()
  File "D:\programs\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1070, in get_chunk
    return self.read(nrows=size)
  File "D:\programs\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1036, in read
    ret = self._engine.read(nrows)
  File "D:\programs\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1848, in read
    data = self._reader.read(nrows)
  File "pandas\_libs\parsers.pyx", line 876, in pandas._libs.parsers.TextReader.read
  File "pandas\_libs\parsers.pyx", line 903, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas\_libs\parsers.pyx", line 945, in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx", line 932, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 2112, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.

И Ρ‚ΠΎ ΠΆΠ΅ самоС Π½Π° RedHat.

$ python3
Python 3.6.6 (default, Aug 13 2018, 18:24:23)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>> for chunk in pandas.read_csv('debug.csv', chunksize=1000, names=range(2504)): pass
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/site-packages/pandas/io/parsers.py", line 1007, in __next__
    return self.get_chunk()
  File "/usr/lib64/python3.6/site-packages/pandas/io/parsers.py", line 1070, in get_chunk
    return self.read(nrows=size)
  File "/usr/lib64/python3.6/site-packages/pandas/io/parsers.py", line 1036, in read
    ret = self._engine.read(nrows)
  File "/usr/lib64/python3.6/site-packages/pandas/io/parsers.py", line 1848, in read
    data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx", line 876, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 903, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 945, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 932, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas/_libs/parsers.pyx", line 2112, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.

@dgrahn Π― Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» debug.txt ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, Ссли Π²Ρ‹ запуститС pd.read_csv('debug.xt', header=None) Π½Π° Mac:

ParserError: ошибка Ρ‚ΠΎΠΊΠ΅Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Ошибка C: оТидалось 204 поля Π² строкС 3, ΡƒΠ²ΠΈΠ΄Π΅Π»Π° 2504

Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ описанной ошибки Buffer overflow caught .

Π― ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» Ρ„Π°ΠΉΠ» debug.txt, ΠΈ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… строках 204 столбца, Π° Π² 3-ΠΉ строкС - 2504 столбца. Π­Ρ‚ΠΎ сдСлаСт Ρ„Π°ΠΉΠ» нСдоступным для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка.

ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚ΡΡ Π»ΠΈ это? GitHub ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСявноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π½ΠΎΠ²ΠΎΠΉ строки (Β«\ r \ nΒ» ΠΈ Β«\ nΒ»), Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ.

@joshlk Π’Ρ‹ использовали ΠΎΠΏΡ†ΠΈΡŽ names=range(2504) ΠΊΠ°ΠΊ описано Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π²Ρ‹ΡˆΠ΅?

@dgrahn Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ воспроизвСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pandas.read_csv('debug.csv', chunksize=1000, names=range(2504)) .

ΠŸΡ€ΠΈΡΡ‚Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ pandas.read_csv('debug.csv', names=range(2504)) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, поэтому маловСроятно, Ρ‡Ρ‚ΠΎ это связано с исходной ошибкой, Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ симптом.

@joshlk Π― ΠΌΠΎΠ³ Π±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ выпуск, Ссли Π±Ρ‹ это Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅.

pd.read_csv(open('test.csv','rU'), encoding='utf-8', engine='python')

РСшил мою ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ = 'ΠΏΠΈΡ‚ΠΎΠ½'

Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ смог Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ большиС Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΊΠΎΠ³Π΄Π° я ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Ρ€Π΅ΠΉΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…, я ΡƒΠ²ΠΈΠ΄Π΅Π», Ρ‡Ρ‚ΠΎ количСство строк ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ. КакиС для этого ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ логичСскиС области?

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ