当前位置: 首页 > 知识库问答 >
问题:

指定名称时,Pandas read_csv不会引发错误行的异常

澹台玉石
2023-03-14

pandas read_csv遇到字段过多的行时会引发异常(错误\u错误\u行)。但是,如果指定了参数名称,则不会发生这种情况。。

示例csv文件的格式为:

1, 2, 3
1, 2, 3
1, 2, 3, 4

与pd一起阅读。read_csv(filepath,header=None)正确引发parserror:Error标记化数据。C错误:第3行中预期有3个字段,由于增加了列,因此SAW4。

但是,如果将“名称”指定为参数:

>>> pd.read_csv(filepath, names=['A', 'B', 'C'], header=None)
   A  B  C
0  1  2  3
1  1  2  3
2  1  2  3

没有引发错误,并且包含了应跳过的“太长/不好”行。。。

是否有一种方法可以指定名称并仍然引发ParserError,以便删除过长/错误的行,并出现错误\u bad\u lines=False?

共有2个答案

陆正德
2023-03-14

根据输入示例做出有根据的猜测:您正在经历的行为可能是由于您隐式地告诉pd.read_csv设置len(usecols)=len(name)。因此,导致初始异常的列将不会被导入。

当您向名称添加与csv文件中的列数量相同的标题名称时,您将返回初始异常:

# 1. Determine maximum column count
    sep = ','                                                   # Define separator
    lines = open(filepath).readlines()                        # Open file and read lines
    colcount = max([len(l.strip().split(sep)) for l in lines])  # Count separator

# 2. Add column headers
    df = pd.read_csv(filepath, names = range(colcount))
    # you can rename your columns of interest here in case of error_bad_lines = False

现在,将包含缺少值的列,并返回异常。请注意,这种计算最大列数的方法仅适用于。csv文件。

西门庆
2023-03-14

似乎没有整洁的熊猫解决办法。你可以做的是用python的open()加载文件CSV,然后在文件字符串中添加一个新的头,这样你就不会修改磁盘上的原始文件。之后,您可以加载文件字符串与StringIO与熊猫。这将保留错误:

#python3
from io import StringIO
import pandas as pd
lines = open('./test.csv', 'r').readlines()
lines = ['A, B, C'] + lines
fileString = '\n'.join(lines)
df = pd.read_csv(StringIO(fileString), sep=",")
 类似资料:
  • 我得到一个错误,当我试图运行这个简单的脚本: 假设我输入“dude”,我得到的错误是: 我正在运行MacOSX10.9.1,我正在使用安装了Python3.3的PythonLauncher应用程序来运行脚本。

  • 我对Java/Spring领域相当陌生,我正在尝试在我的Spring Boot应用程序中使用@ControllerAdvise。ControllerAdvision捕获异常,但不显示我的自定义响应。 下面是引发异常的RestController的快照 以下是@ControllerAdvice

  • 似乎“将tensorflow导入为tf”直接引发了此错误 Colab link:https://colab.research.google.com/drive/1Jr0j_I_npKQxcQ1ggJQFHTqoJHmt9Bqk

  • 问题内容: 几天后,我匆忙将一个URL错误地粘贴到了Java程序中,我试图运行该特定程序,并且出于好奇,它成功运行了,没有任何警告,没有错误,也没有异常。类似的代码如下所示。我编译并成功运行。 在main()方法的第二行,它应该发出一些编译时错误,但它可以很好地工作并在控制台上显示相应的消息。为什么? 问题答案: 标记被解释为标签。而随后启动一个新的行注释。因此,发布的代码仍然是有效的Java(如

  • 因此,我必须创建一个方法,将输入字符串分成名字/中间名/姓氏,计算创建的“学生”的数量,等等,然后我必须创建测试这些方法的类。 这是我测试代码的方式: } 当它为具有2个名称的学生测试toString时,我一直遇到空指针异常,我不知道为什么。

  • 我目前有一个RESTfulWebService跑步服。我最近添加了一个过滤器,它可以执行一些auth操作,并且可以在happy path的情况下工作。但是,当我需要从这个过滤器中抛出一个错误时,它不会将异常序列化为一个漂亮的json字符串,而是抛出一个500,错误如下: 问题是,我不想在应用程序/八位字节流中写入任何内容。我的服务只使用。这在我的实际类中不是问题,我可以在这些类中指定注释。从资源主