我目前正在尝试使用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')
请注意,您可能还需要在原始文件中点画"
标记。