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



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

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

我得到以下错误:

第2行(从11列改为12列)

对于标头之后的每一行。

原因似乎是其中一列包含逗号,但试图使用该列数据周围的文本限定符(")来处理此问题。如果我使用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

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

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

import pandas
data = pandas.read_csv(fname)

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

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

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

相关内容

  • 没有找到相关文章

最新更新