我正在尝试加载我使用Objective-C(使用XCode)编写的OS X应用程序创建的csv文本文件.文本文件(temp2.csv)在编辑器中看起来很好,但它有问题,我在将它读入Pandas数据帧时会收到此错误.如果我将数据复制到一个新的文本文件(temp.csv)并保存它工作正常!两个文本文件明显不同(一个是74个字节,另一个是150个) - 可能是不可见的字符? - 但是它非常烦人,因为我希望python代码加载C代码生成的文本文件.附上文件以供参考.
temp.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 "", line 1, in 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