numpy读取带逗号字段的CSV文件吗?
我正在尝试使用 numpy.recfromcsv(...)
来读取一个CSV文件,但这个文件中的某些字段里有逗号。这些包含逗号的字段是用引号括起来的,比如 "value1, value2"
。但是,Numpy把这个引号里的内容当成了两个不同的字段,所以读取的时候就出问题了。我现在用的命令是
data = numpy.recfromcsv(dataFilename, delimiter=',', autstrip=True)
我发现了这个问题
但那个方法没有用到 numpy
,我其实很想用它。所以我希望这里能有几个选项可以选择:
- 有没有什么方法可以替代
numpy.recfromcsv(...)
,让我能把引号里的字段当作一个整体来读取,而不是分成多个用逗号隔开的字段? - 我需要把我的CSV文件格式改得不一样吗?
- (另外一种方法,但不是最理想的)按照引用的问题来读取CSV,之后再进行额外的步骤来创建
numpy
数组。
请给我一些建议。
3 个回答
1
如果你考虑使用Python自带的csv读取器,可以参考Python的文档这里:
Python的csv读取器定义了一些可选的Dialect.quotechar
选项,默认值是'"'
。在csv格式标准中,quotechar是另一种字段分隔符,而分隔符(在你的情况下是逗号)可以包含在被引号包围的字段中。关于csv格式中引号字符的规则,可以在这个页面的第一部分找到清晰的说明。
所以,看起来使用默认的引号字符"
,Python自带的csv读取器就能在默认模式下解决你的问题。
如果你想继续使用Python,为什么不先清理一下你的csv文件呢?可以用正则表达式来识别被引号包围的字段,然后把分隔符从逗号改成\t
,比如说。但这样你实际上是在自己解析csv格式。
2
你可以使用 pandas 来做到这一点:
np_array = pandas.io.parsers.read_csv("file_with_comma_fields_quoted.csv").as_matrix()
0
其实,最简单的方法是使用标准库中的一个模块,叫做 csv
,先把文件读进一个元组里,然后再把这个元组作为输入放到一个numpy数组里。我本来希望能直接用numpy来读取文件,但好像这样不太行。