如何使用numpy genfromtxt允许文本限定符

时间:2013-12-09 12:16:24

标签: python arrays csv numpy genfromtxt

我目前正在尝试使用Python中的numpy库将一些逗号分隔的文本数据导入到数组中。我使用以下代码:

data = np.genfromtxt(fname, delimiter=',')

我收到以下错误:

  

第2行(有12列而不是11列)

表示标题后的每一行。

原因似乎是其中一个列包含一个逗号,但尝试使用该列数据周围的文本限定符(“)处理此问题。如果我使用Python csv库,则默认处理例如:

reader = csvreader(open(fname, 'rb'))

我知道我可以使用csv库导入数据,然后将其转换为数组,但我想知道是否可以从numpy的一个函数中执行此操作,该函数将文本数据转换为数组为genfromtxt。我已经查看了genfromtxt上的帮助,但所列出的参数似乎都没有描述我要找的内容,除非我遗漏了什么。

如果它有帮助,这里是文件中几行的样本:

survived,pclass,name,sex,age,sibsp,parch,ticket,fare,cabin,embarked
0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S

我认为这是名称列引起的问题。

2 个答案:

答案 0 :(得分:1)

Numpy数组不太适合您在这里的分类数据。您可能最好使用pandas

import pandas
data = pandas.read_csv(fname)

答案 1 :(得分:1)

解决此问题的一种方法是添加另一个名称字段,这样您就有十三个名称字段,其中包含一个单独的forename和surname列:

survived,pclass,surname,forname,sex,age,sibsp,parch,ticket,fare,cabin,embarked

如果您随后导入:

data = np.genfromtxt(fname, delimiter=',',names=True,dtype=None)

应该有效:

data['surname']
array(['"Braund', '"Cumings', '"Heikkinen'], 
      dtype='|S10')

请注意,您可能还需要在原始文件中列出"标记。