【问题标题】:How can I fix "Error tokenizing data" on pandas csv reader?如何修复 pandas csv 阅读器上的“错误标记数据”?
【发布时间】:2019-04-14 19:34:32
【问题描述】:

我正在尝试使用 pandas 读取 csv 文件。

这个文件实际上只有一行,但每当我尝试读取它时都会导致错误。

第 8 行似乎出了点问题,但我几乎找不到第 8 行,因为它显然只有一行。

我喜欢:

with codecs.open("path_to_file", "rU", "Shift-JIS", "ignore") as file:

df = pd.read_csv(file, header=None, sep="\t")
df

然后我得到:

ParserError: Error tokenizing data. C error: Expected 1 fields in line 8, saw 3

我不明白到底发生了什么,所以您的任何建议都将不胜感激。

【问题讨论】:

    标签: python pandas csv tokenize


    【解决方案1】:

    我为此苦苦挣扎了将近半天,我用记事本打开了 csv,发现分隔符是 TAB 而不是逗号,然后尝试了 belo 组合。

    df = pd.read_csv('C:\\myfile.csv',sep='\t', lineterminator='\r')
    

    【讨论】:

      【解决方案2】:

      试试df = pd.read_csv(file, header=None, error_bad_lines=False)

      【讨论】:

      • 非常感谢您的评论 Po Xin,我已经尝试过了,又遇到了类似这样的错误ParserError: Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.
      • 如何避免在终端显示错误?
      【解决方案3】:

      现有答案不会在您的数据框中包含这些额外的行。如果您希望数据框与最宽点一样宽,可以使用以下内容:

      delimiter = ','
      max_columns = max(open(path_name, 'r'), key = lambda x: x.count(delimiter)).count(delimiter)
      df = pd.read_csv(path_name, header = None, skiprows = 1, names = list(range(0,max_columns)))
      

      如果确实有标题,则设置 skiprows = 1,您以后可以随时检索标题列名称。 您还可以识别填充的列数多于原始标题中列名数的行。

      【讨论】:

        猜你喜欢
        • 2013-12-12
        • 1970-01-01
        • 2019-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        相关资源
        最近更新 更多