首页 文章

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

提问于
浏览
1

我有一堆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行,in_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中返回_read(filepath_or_buffer,kwds)文件”/ Library / Frameworks /Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py“,第198行,在_read解析器中= 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 /框架/ 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行,在pandas中 . parser.TextReader._get_header(pandas / parser.c:5831)pandas.parser.CParserError:传递头= 0但文件中只有0行

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

谢谢

3 回答

  • 0

    看起来像pandas将第0行指定为 Headers . 试着打电话:

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

    要么

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

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

  • 0

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

  • 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-x86_64 . init中的egg / pandas / io / parsers.pyc(self,src,** kwds)970 kwds ['allow_leading_cols'] = self.index_col不是False 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- pandas.parser.TextReader.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-x86_64.egg/pandas/parser.so在pandas.parser.TextReader._get_header(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')

    它运行正确 .

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

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

相关问题