pandas read_csv 错误: Buffer overflow caught - possible malformed input file.

一、错误现象

  File "/root/anaconda2/lib/python2.7/site-packages/pandas/io/parsers.py", line 1213, in read
    data = self._reader.read(nrows)
  File "pandas/parser.pyx", line 766, in pandas.parser.TextReader.read (pandas/parser.c:7988)
  File "pandas/parser.pyx", line 788, in pandas.parser.TextReader._read_low_memory (pandas/parser.c:8244)
  File "pandas/parser.pyx", line 842, in pandas.parser.TextReader._read_rows (pandas/parser.c:8970)
  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: Buffer overflow caught - possible malformed input file.

二、错误原因

因此:

        在Windows当源数据行尾有两个字符“\r\n”时,且使用pandas的默认to_csv(默认line_terminator : string, default ‘n’)时,就会多出来一个“\r”字符。

pandas read_csv 错误: Buffer overflow caught - possible malformed input file._第1张图片

说明:

\r —回车符Carriage return,光标移动到行首 
\n—换行符line feed, 光标移动到下一行New line

对于换行这个动作: 
unix/linux下一般只有一个0x0A表示换行(“\n”),每行结尾只有“<换行>”,采用换行符LF表示下一行,即“\n”; 
windows下一般都是0x0D和0x0A两个字符(“\r\n”),每行结尾是“<回车><换行>”,即“\r\n”; 
苹果机(MAC OS系统)则采用回车符CR表示下一行(\r),每行结尾是“<回车>”,采用回车符CR表示下一行,即“\r”。

三、错误解决方案(源头上)

在使用to_csv时,使用“\r\n”作为行分割符,读取时使用默认read_csv读取

写:
data.to_csv("./temp/company_hold.csv", line_terminator="\r\n", index=False)

读:
pandas.read_csv("./temp/company_hold.csv")

pandas read_csv 错误: Buffer overflow caught - possible malformed input file._第2张图片

四、附录

其它网友从结果层面提供的解决方案:

pandas.read_csv('./temp/test.csv', lineterminator='\n') 

添加参数lineterminator='\n',使用\n作为换行符!让跟\r没有关系就ok了。

https://blog.csdn.net/qq_23392341/article/details/76851183 

https://blog.csdn.net/leiting_imecas/article/details/68928553

你可能感兴趣的:(2,Python)