一尘不染

使用numpy.genfromtxt读取包含逗号的字符串的csv文件

python

我正在尝试使用csv文件读取文件,numpy.genfromtxt但某些字段是包含逗号的字符串。字符串用引号引起来,但是numpy不能将引号识别为定义了单个字符串。例如,使用“
t.csv”中的数据:

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数组?


阅读 209

收藏
2020-12-20

共1个答案

一尘不染

您可以为此使用pandas(正在成为处理Python中数据框(异构数据)的默认库)。它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.

默认值为"。一个例子:

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逗号分隔符来处理空格。

除了功能强大的csv阅读器外,我还强烈建议您对具有异类数据的熊猫使用(尽管您可以使用结构化数组,但以numpy给出的示例输出都是字符串)。

2020-12-20