0

我目前正在尝试使用 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

我认为这是导致问题的名称列。

4

2 回答 2

1

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

import pandas
data = pandas.read_csv(fname)
于 2013-12-09T12:24:07.590 回答
1

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

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')

请注意,您可能还希望删除"原始文件中的标记。

于 2013-12-09T14:11:35.260 回答