python - 标记化数据时出错。 C 错误 : EOF following escape character

标签 python csv pandas text-files eof

我正在尝试加载一个 csv 文本文件,该文件是我使用以 Objective-C(使用 XCode)编写的 OS X 应用程序创建的。文本文件 (temp2.​​csv) 在编辑器中看起来不错,但它有问题,在将它读入 Pandas 数据帧时出现此错误。如果我将数据复制到一个新的文本文件 (temp.csv) 中并保存它就可以正常工作!这两个文本文件明显不同(一个是 74 字节,另一个是 150 字节)——也许是不可见字符? - 但它非常烦人,因为我希望 python 代码加载 C 代码生成的文本文件。附上文件以供引用。

临时.csv

-3.132700,0.355885,9.000000,0.444416
-3.128256,0.444416,9.000000,0.532507

temp2.​​csv

-3.132700,0.355885,9.000000,0.444416
-3.128256,0.444416,9.000000,0.532507

(我在 StackExchange 上找不到关于这个特定错误的任何帮助)。

Python 2.7.11 |Anaconda 2.2.0 (x86_64)| (default, Dec  6 2015, 18:57:58) 
[GCC 4.2.1 (Apple Inc. build 5577)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> import pandas as pd
>>> df = pd.read_csv("temp2.csv", header=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/billtubbs/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py", line 498, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/Users/billtubbs/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py", line 275, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/Users/billtubbs/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py", line 590, in __init__
    self._make_engine(self.engine)
  File "/Users/billtubbs/anaconda/lib/python2.7/site-packages/pandas/io/parsers.py", line 731, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/Users/billtubbs/anaconda/lib/python2.7/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 717, in pandas.parser.TextReader._get_header (pandas/parser.c:7496)
  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: EOF following escape character
>>> df = pd.read_csv("temp.csv", header=None)
>>> df
          0         1  2         3
0 -3.132700  0.355885  9  0.444416
1 -3.128256  0.444416  9  0.532507

脚注: 我想我找到了问题所在。

>>> f = open('temp2.csv')
>>> contents = f.read()
>>> print contents
??-3.132700,0.355885,9.000000,0.444416
-3.128256,0.444416,9.000000,0.532507
>>> contents
'\xff\xfe-\x003\x00.\x001\x003\x002\x007\x000\x000\x00,\x000\x00.\x003\x005\x005\x008\x008\x005\x00,\x009\x00.\x000\x000\x000\x000\x000\x000\x00,\x000\x00.\x004\x004\x004\x004\x001\x006\x00\n\x00-\x003\x00.\x001\x002\x008\x002\x005\x006\x00,\x000\x00.\x004\x004\x004\x004\x001\x006\x00,\x009\x00.\x000\x000\x000\x000\x000\x000\x00,\x000\x00.\x005\x003\x002\x005\x000\x007\x00'

里面全是转义字符!如何删除它们?

最佳答案

您需要将参数encoding 添加到read_csv , 因为文件编码是 UTF-16:

import pandas as pd

contents = '\xff\xfe-\x003\x00.\x001\x003\x002\x007\x000\x000\x00,\x000\x00.\x003\x005\x005\x008\x008\x005\x00,\x009\x00.\x000\x000\x000\x000\x000\x000\x00,\x000\x00.\x004\x004\x004\x004\x001\x006\x00\n\x00-\x003\x00.\x001\x002\x008\x002\x005\x006\x00,\x000\x00.\x004\x004\x004\x004\x001\x006\x00,\x009\x00.\x000\x000\x000\x000\x000\x000\x00,\x000\x00.\x005\x003\x002\x005\x000\x007\x00'

text_file = open("test/file1.csv", "wb")
text_file.write(contents)
text_file.close()

df = pd.read_csv("test/file1.csv", header=None, encoding='utf-16')
print df

          0         1  2         3
0 -3.132700  0.355885  9  0.444416
1 -3.128256  0.444416  9  0.532507

关于python - 标记化数据时出错。 C 错误 : EOF following escape character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34714070/

相关文章:

python - 如何使用sox重新采样和正确连接wav文件?

python - Xcode 中的纯 Python?

python - Pandas:如何应用传递的条件运算符来选择 pandas 中的行?

python - 循环此代码以根据先前计算的数据帧获取新的数据帧?

python - matplotlib - 子图中的 twinx 轴没有 xlabel 和 xticks

python - 循环数据帧以限制并求和另一个数据帧

python 套接字应用程序未按预期从终端运行

linux - 在 Linux 中将相关数据行分组到单个列中

python - csv utf-8 writer - 兼容python2.4

python - 读取 CSV 文件中的所有列?