我正在尝试使用csv文件读取文件,numpy.genfromtxt但某些字段是包含逗号的字符串。字符串用引号引起来,但是numpy不能将引号识别为定义了单个字符串。例如,使用“ t.csv”中的数据:
numpy.genfromtxt
2012, "Louisville KY", 3.5 2011, "Lexington, KY", 4.0
编码
np.genfromtxt('t.csv', delimiter=',')
产生错误:
ValueError:检测到一些错误!第2行(获得4列而不是3列)
我正在寻找的数据结构是:
array([['2012', 'Louisville KY', '3.5'], ['2011', 'Lexington, KY', '4.0']], dtype='|S13')
查看文档,我看不到任何解决方案。有没有办法用numpy做到这一点,或者我只需要使用csv模块读入数据,然后将其转换为numpy数组?
csv
您可以为此使用pandas(正在成为处理Python中数据框(异构数据)的默认库)。它read_csv可以处理。从文档:
read_csv
quotechar:字符串 The character to used to denote the start and end of a quoted item. Quoted items can include the delimiter and it will be ignored.
quotechar:字符串
The character to used to denote the start and end of a quoted item.
Quoted items can include the delimiter and it will be ignored.
默认值为"。一个例子:
"
In [1]: import pandas as pd In [2]: from StringIO import StringIO In [3]: s="""year, city, value ...: 2012, "Louisville KY", 3.5 ...: 2011, "Lexington, KY", 4.0""" In [4]: pd.read_csv(StringIO(s), quotechar='"', skipinitialspace=True) Out[4]: year city value 0 2012 Louisville KY 3.5 1 2011 Lexington, KY 4.0
这里的技巧是,您还必须使用skipinitialspace=True逗号分隔符来处理空格。
skipinitialspace=True
除了功能强大的csv阅读器外,我还强烈建议您对具有异类数据的熊猫使用(尽管您可以使用结构化数组,但以numpy给出的示例输出都是字符串)。