【问题标题】:Python 3 Pandas Error: pandas.parser.CParserError: Error tokenizing data. C error: Expected 11 fields in line 5, saw 13Python 3 Pandas 错误:pandas.parser.CParserError:错误标记数据。 C 错误:第 5 行中应有 11 个字段,但看到了 13
【发布时间】:2015-06-27 14:03:36
【问题描述】:

我遇到了类似的问题,所以我查看了这个答案。

Python Pandas Error tokenizing data

但是,由于某种原因,我的所有行都被跳过了。

我的代码很简单:

import pandas as pd

fname = "data.csv"
input_data = pd.read_csv(fname) 

我得到的错误是:

  File "preprocessing.py", line 8, in <module>
    input_data = pd.read_csv(fname) #raw data file ---> pandas.core.frame.DataFrame type
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/io/parsers.py", line 465, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/io/parsers.py", line 251, in _read
    return parser.read()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/io/parsers.py", line 710, in read
    ret = self._engine.read(nrows)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/io/parsers.py", line 1154, in read
    data = self._reader.read(nrows)
  File "pandas/parser.pyx", line 754, in pandas.parser.TextReader.read (pandas/parser.c:7391)
  File "pandas/parser.pyx", line 776, in pandas.parser.TextReader._read_low_memory (pandas/parser.c:7631)
  File "pandas/parser.pyx", line 829, in pandas.parser.TextReader._read_rows (pandas/parser.c:8253)
  File "pandas/parser.pyx", line 816, in pandas.parser.TextReader._tokenize_rows (pandas/parser.c:8127)
  File "pandas/parser.pyx", line 1728, in pandas.parser.raise_parser_error (pandas/parser.c:20357)
pandas.parser.CParserError: Error tokenizing data. C error: Expected 11 fields in line 5, saw 13

【问题讨论】:

  • 所以我们应该以某种方式从产生错误的数据中进行逆向工程?请发布示例原始输入数据
  • 您的 CSV 文件的每一行似乎没有相同数量的字段。尝试在 Excel 或您喜欢的电子表格程序中打开它以验证其结构。
  • 这个描述把我带到了这里,这和我遇到的问题一样。为此 +1。
  • 为 read_csv() 的可变列数动态生成列名:stackoverflow.com/a/52890095/1427624

标签: csv python-3.x pandas


【解决方案1】:

问题可能是csv 文件的一行或多行包含比预期更多的分隔符(逗号,)。当每一行与定义列名的csv文件的第一行的分隔符数量匹配时,就会解决此问题。

【讨论】:

    【解决方案2】:

    此错误意味着,每行的列数不相等。在您的情况下,直到第 5 行,您有 11 列,但在第 5 行中,您有 13 个输入(列)。

    对于这个问题,你可以尝试以下方法打开读取你的文件:

    import csv
    with open('filename.csv', 'r') as file:
        reader = csv.reader(file, delimiter=',')  #if you have a csv file use comma delimiter
        for row in reader:
            print (row)
    

    【讨论】:

      【解决方案3】:

      我也遇到过类似的问题。使用我的 csv 文件,因为它们是在 R 中创建的,所以它有一些额外的逗号和与“常规”csv 文件不同的间距。

      我发现如果我在 R 中做了一个read.table,我可以使用write.csvrow.names = F 的选项来保存它。

      我无法在 pandas 中获得任何读取选项来帮助我。

      【讨论】:

        【解决方案4】:

        我遇到了同样的错误,我使用以下方法读取了我的 csv 数据: d1 = pd.read_json('my.csv') 然后我试试这个 d1 = pd.read_json('my.csv', sep='\t') 这一次是对的。 所以如果你的分隔符不是','的话你可以试试这个方法,因为默认的是',',所以如果你没有指明清楚就会出错。 pandas.read_csv

        【讨论】:

        • 太棒了!万分感谢!它也解决了我的问题。
        【解决方案5】:

        出现此解析错误的原因有多种,不同原因的解决方案已在此处以及Python Pandas Error tokenizing data 中发布。

        我在此处发布了此错误的一个可能原因的解决方案:https://stackoverflow.com/a/43145539/6466550

        【讨论】:

          【解决方案6】:

          对于那些登陆这里的人,当文件实际上是 .xls 文件而不是真正的 .csv 时,我收到了这个错误。尝试在电子表格应用程序中重新保存为 csv。

          【讨论】:

          • 哇。谢谢你。没有任何工作,我花了大约 2 个小时在谷歌上搜索如何解决这个问题。我什么都试过了!原来,发送给我的“csv”实际上是一个“txt”文件,而不是真正的 csv。我不知道这是怎么发生的,因为它以“.csv”结尾,但谢谢!
          【解决方案7】:

          解决方案是使用 pandas 内置分隔符“嗅探”。

          input_data = pd.read_csv(fname, sep=None) 
          

          【讨论】:

            猜你喜欢
            • 2021-02-10
            • 2020-11-02
            • 2020-12-10
            • 1970-01-01
            • 1970-01-01
            • 2018-05-10
            • 2018-03-14
            • 2020-03-30
            • 2020-04-12
            相关资源
            最近更新 更多