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

使用Python Pandas读取制表符分隔的文件

壤驷乐邦
2023-03-14

我在使用Pandas读取选项卡分隔的文件时遇到问题。

所有单元格值都有双引号,但对于某些行,有一个额外的双引号打断了整个过程。例如:

Column A  Column B  Column C
"foo1"    "121654"  "unit"
"foo2"    "1214"    "unit"
"foo3"    "15884""  

我得到的错误是:错误标记数据。C错误:第8355行预期有31个字段,SAW58

我使用的代码是:

csv = pd.read_csv(file, sep='\t',  lineterminator='\n', names=None) 

它适用于其余文件,但不适用于出现额外双引号的文件。

共有2个答案

强烨
2023-03-14

您可以执行预处理步骤来修复报价问题:

with open(file, 'r') as fp:
    text = fp.read().replace('""', '"')

with open(file, 'w') as fp:
    fp.write(text)
壤驷睿
2023-03-14

如果无法更改错误输入,最好的方法是将输入文件读入io。StringIO对象,替换双引号,然后将这个类似文件的对象传递给pd.read(它支持文件名和类似文件的对象)

这样,您就不必创建临时文件或更改输入数据。

import io

with open(file) as f:
    fileobject = io.StringIO(f.read().replace('""','"'))

csv = pd.read_csv(fileobject, sep='\t',  lineterminator='\n', names=None)
 类似资料:
  • 目前,我正在逐行读取由制表符分隔的文件,将每行中的项目拆分,并通过硬编码值50查找由50个项目组成的制表符分隔的行,然后创建数据表。 问题:以制表符分隔的源文件在拆分后有时有50或53项以制表符分隔的行。需要直接读取以制表符分隔的源文件中具有最大制表符分隔符的行,然后继续我的逻辑。 我的C代码

  • 问题内容: 我正在尝试读取以下形式的大文本文件: 我想在文本文件中将此字符串作为一个大的Java字符串读取。这可能吗?我知道使用split方法。 它可以逐行读取它,但我真正需要的是在“ +”号处分割此长文本字符串。之后,我想将其存储为数组,arraylist,列表,… 谁能帮我这个?因为互联网上的所有信息都只是逐行读取文件。提前致谢! 问题答案: 您可以使用或任何IO类读取文件。假设文件中包含该字

  • 问题内容: 我有一个文件,其中用分号“”分隔行。我想逐行阅读此文件,其中行应基于而不是换行符的存在。 一种方法是: 但是,如果我的文件太大,则内存使用效率不高。与其一起阅读整个文件,不如逐行阅读。 支持参数’newline’,但是此参数仅用作此处提到的输入。 有什么方法可以有效地读取文件行,但要基于预先指定的分隔符吗? 问题答案: 您可以使用生成器:

  • 问题内容: 我有以下格式的数据: 现在,我尝试根据最后一个字段对文件进行递减排序。我尝试了以下命令,但是没有按照我们的预期排序。 什么是正确的方法? 这是样本数据。 问题答案: 使用 bash ,可以达到目的: 注意单引号字符串前面的美元符号。您可以在 bash 手册页 的ANSI- C报价部分中 阅读有关它的内容。

  • 我一直在使用Pandas/Python在Windows中读取以制表符分隔的数据文件,没有任何问题。该数据文件在前三行中包含注释,随后是标题。 我现在试图阅读这个文件与我的Mac。我第一次在Mac上使用Python。)我得到以下错误。 如果将read_csv的error_bad_lines参数设置为False,我将获得以下信息,这些信息将一直持续到最后一行的末尾。 我需要为编码参数指定一个值吗?似乎

  • 问题内容: 我正在做一个自学练习,以帮助我更多地了解Java,但是我一直陷在这个问题上。我有以下txt文件: 注意: 名称和爱好由制表符分隔 读取所有行并将其放入arraylist(name,hobby)的最佳方法是什么。棘手的部分是 有空格,必须将其放在一个数组下,显然我无法对其进行硬编码。这是我当前的代码: 我收到一个错误: java.lang.StringIndexOutOfBoundsEx