在pandas中打开损坏的csv文件的策略

时间:2014-01-16 06:59:21

标签: python pandas

我有一堆csv文件,我在Pandas中加载就好了,但是一个文件正在起作用我正在这样打开它:

df = pd.DataFrame.from_csv(csv_file)

错误:

  

文件   “/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/core/frame.py”   第1268行,来自from_csv       encoding = encoding,tupleize_cols = False)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py”,   第400行,在parser_f中       return _read(filepath_or_buffer,kwds)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py”,   第198行,在_read中       parser = TextFileReader(filepath_or_buffer,** kwds)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py”,   第479行,在 init 中       self._make_engine(self.engine)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py”,   第586行,在_make_engine中       self._engine = CParserWrapper(self.f,** self.options)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py”,   第957行, init       self._reader = _parser.TextReader(src,** kwds)文件“parser.pyx”,第477行,在pandas.parser.TextReader中。 cinit   (pandas / parser.c:4434)文件“parser.pyx”,第599行,in   pandas.parser.TextReader._get_header(pandas / parser.c:5831)   pandas.parser.CParserError:传递头= 0但文件中只有0行

对我而言,这意味着文件中存在某种损坏,快速查看似乎很好,但它是一个大文件,并且可视化检查每一行不是一个选项,什么是一个好的策略解决psas无法打开的csv文件?

谢谢

3 个答案:

答案 0 :(得分:0)

看起来pandas将第0行指定为标题。试着打电话:

df = pd.DataFrame.from_csv(csv_file,header=None)

    df = pd.DataFrame.read_csv(csv_file,header=None)

然而,奇怪的是文件似乎有零行(即它是空的)。也许文件路径错了?

答案 1 :(得分:0)

如果在Linux中打开它在操作系统中检查它然后用awk或sed修复它...如果在Windows中,你也可以尝试vim来检查和修复它。简而言之,在Pandas中修复文件可能不是最好的。您很可能有奇数行结尾(因为错误消息显示为0行),因此需要标题文件或猫或使用Vim来确定行结尾,以便您可以决定如何最好地修复或处理。

答案 2 :(得分:0)

我遇到了像你这样的问题:


  

/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.13.1_601_g4663353-py2.7-macosx-10.9- init 中的x86_64.egg / pandas / io / parsers.pyc(self,src,** kwds)       970 kwds [' allow_leading_cols'] = self.index_col不是假的       971    - > 972 self._reader = _parser.TextReader(src,** kwds)       973       974 #XXX

     

/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.13.1_601_g4663353-py2.7-macosx-10.9- pandas.parser.TextReader中的x86_64.egg / pandas / parser.so。 cinit (pandas / parser.c:4628)()

     

/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas-0.13.1_601_g4663353-py2.7-macosx-10.9- pandas.parser.TextReader._get_header中的x86_64.egg / pandas / parser.so(pandas / parser.c:6068)()

     

CParserError:传递的标头= 0但文件中只有0行

     

我的代码是:

  

df = pd.read_csv(' / Users / steven / Documents / Mywork / Python / sklearn / beer / data')

最后,我发现我犯了一个错误:我发送了一个目录路径而不是文件到 read_csv

正确的代码是:

  

df = pd.read_csv(' /Users/steven/Documents/Mywork/Python/sklearn/beer/data/beer_reviews.csv')

它运行正确。

所以,我认为你的问题的原因在于你发送的文件。也许就像我一样,它是目录的路径。可能该文件为空或已损坏,或者编码设置错误。

我希望以上内容对您有所帮助。