NumPy如何读取包含逗号的CSV文件?

5

我正在尝试使用numpy.recfromcsv(...)读取CSV文件,其中一些字段中包含逗号。拥有逗号的字段被引号包围,例如"value1, value2"。Numpy将带引号的字段视为两个不同的字段,这并不太好。我现在正在使用的命令是:

    data = numpy.recfromcsv(dataFilename, delimiter=',', autstrip=True)

我找到了这个问题:

如何在Python中读取带有字段内逗号的CSV文件

但它没有使用 numpy,而我真的很想使用它。 因此,我希望至少有以下几个选项之一:

  1. 有哪些选项可以替代 numpy.recfromcsv(...),可以让我将引号括起来的字段作为一个字段而不是多个逗号分隔的字段进行读取?
  2. 我应该以不同的格式编写我的CSV文件吗?
  3. (或者,但不是理想的)像引用的问题一样读取CSV,然后采取额外的步骤创建 numpy 数组。

请给予建议。


3个回答

2

使用 pandas 可以实现这一点:

np_array = pandas.io.parsers.read_csv("file_with_comma_fields_quoted.csv").as_matrix()

1

如果您考虑使用本地Python csv阅读器,请参见Python dochere

Python csv reader定义了一些可选的Dialect.quotechar选项,默认为'"'。在csv格式标准中,quotechar是另一个字段分隔符,并且分隔符(在您的情况下为逗号)可以包含在引用的字段中。有关csv格式中引号字符的规则,请参阅this page的第一部分。

因此,似乎使用默认引号字符",本地Python csv reader可以以默认模式处理您的问题。

如果您想坚持使用Python,为什么不先清理您的csv文件,使用regexp识别带引号的字段,然后将分隔符从逗号更改为例如\t。但在这里,您实际上正在自己解析csv格式。


0
原来最简单的方法是使用标准库模块csv将文件读入元组,然后将元组用作numpy数组的输入。我希望能够直接使用numpy读取它,但似乎行不通。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接