【问题标题】:numpy read CSV file where some fields have commas?numpy 读取某些字段有逗号的 CSV 文件?
【发布时间】:2013-01-02 12:10:02
【问题描述】:

我正在尝试使用 numpy.recfromcsv(...) 读取 CSV 文件,其中某些字段中有逗号。包含逗号的字段用引号括起来,即"value1, value2"。 Numpy 将引用的字段视为两个不同的字段,并且效果不佳。我现在使用的命令是

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

我发现了这个问题

Read CSV file with comma within fields in Python

但它不使用numpy,我真的很想使用它。 所以我希望这里至少有几个选项之一:

  1. numpy.recfromcsv(...) 有哪些选项可以让我将带引号的字段读取为一个字段,而不是多个逗号分隔的字段?
  2. 我应该以不同的方式格式化我的 CSV 文件吗?
  3. (或者,但不理想)按照引用的问题读取 CSV,并通过额外步骤创建 numpy 数组。

请指教。

【问题讨论】:

  • 也许pandas.read_csv 是一个选项
  • 查看今天回答的其他问题stackoverflow.com/questions/14396362/…。建议将整个文件作为单行读取并以 '\n' 作为分隔符的答案,然后定义一个自定义转换器函数,将每行拆分为其元素可能是要走的路。

标签: python csv numpy comma


【解决方案1】:

如果您考虑使用原生 Python csv 阅读器,使用 Python doc here

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

因此,似乎使用" 的默认引用字符,本机 Python csv 阅读器可以在默认模式下管理您的问题。

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

【讨论】:

    【解决方案2】:

    事实证明,最简单的方法是使用标准库模块csv 将文件读入元组,然后将元组用作 numpy 数组的输入。我希望我可以用 numpy 阅读它,但这似乎不起作用。

    【讨论】:

      【解决方案3】:

      pandas 可以做到这一点:

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

      【讨论】:

        猜你喜欢
        • 2020-06-23
        • 1970-01-01
        • 2012-01-08
        • 2016-08-28
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多