【问题标题】:Pandas kernel appears to have died. It will restart automatically熊猫内核似乎已经死了。它会自动重启
【发布时间】:2021-08-04 17:02:42
【问题描述】:

我尝试使用以下代码加载包含 43186 行的 CSV 文件:

import csv
import pandas as pd

df = pd.read_csv('file.csv', sep=',', engine='python', error_bad_lines=False)

输出

Skipping line 2574: field larger than field limit (131072)
Skipping line 892: Expected 13 fields in line 892, saw 15
Skipping line 6376: Expected 13 fields in line 6376, saw 15
Skipping line 35433: Expected 13 fields in line 35433, saw 15

在内核最终死掉之前。我尝试了其他一些更大的 CSV,同样的代码适用于其他人。我怎样才能解决这个问题?我可以跳过行。我尝试使用csv.field_size_limit(sys.maxsize) 增加限制 但它也不起作用。我从第 35433 行浏览到最后,那里没有坏行,如果确实存在坏行,应该被 error_bad_lines=False 跳过,对吧?任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas dataframe csv


    【解决方案1】:

    字段大于字段限制 (131072)

    这可能意味着多行(很多)被解析器视为一个多行字段。

    所以 csv 文件中的引用肯定有问题。

    一种解决方案(除了修复 csv 文件之外)可能是以某种方式告诉解析器不要使用/扫描多行字段 - 这会将该行标记为无效。

    或者 csv 文件可能根本不使用带引号的字段(这将允许在字段内使用引号)。在这种情况下,您应该告诉解析器字段没有被引用。

    【讨论】:

    • 你好@Danny_ds,谢谢!我已经清理了 CSV,所有内容都正确地用逗号分隔,没有多行大小写,也没有坏引号。 > field limit 的行确实在一列中有一个非常长的字符串值。我认为error_bad_lines=False应该自动跳过这个长字符串案例,不是吗?
    • @annisa 嗯,解析器没有机会读取整行(缓冲区已满),所以可能是混淆了?你确定错误是按这个顺序出现的吗? (第 2574 行,然后是第 892 行?)。
    • 是的,直接从笔记本粘贴输出。也许熊猫首先查找行>字段限制,然后从顶部再次读取以查找坏行。缓冲区已满,是有道理的,我想用普通的条件来捕捉和跳过这些行
    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2018-04-11
    • 2021-04-08
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多