2017-04-24 83 views
0

我有一个CSV一些数据被格式化为如(I删除为简单起见一些列):Numpy无法正确接受字符串?

Year,Region,Round,Diff 
2014,South,Second Round,-24 
2015,West,First Round,48 
# ...lots of rows of this 

我希望同时使用在RegionRound列中的字符串数据,并在整数数据Diff栏。

这里是我的相关代码:

import sklearn 
import numpy as np 
from numpy import genfromtxt 
from StringIO import StringIO 

# Some other code... 

my_dtype=[('Year', int), ('Region', str),('Round', str),('Diff', int)] 
data = np.genfromtxt(my_file, delimiter=',',names=True,dtype=my_dtype) 
print data 

当我打印我的数据,我得到以下。 NumPy使每个字符串都是一个空字符串。

[ (2014, '', '', -24) 
(2010, '', '', 48) 
...] 

有谁知道我该如何解决这个问题?我使用dtype属性是否错误?或者是其他东西?提前致谢。

回答

1

而不是把str文本字段的数据类型,使用S格式,最大字符串长度:

In [10]: my_dtype = [('Year', int), ('Region', 'S8'), ('Round', 'S16'), ('Diff', int)] 

In [11]: data = np.genfromtxt('regions.csv', delimiter=',', names=True, dtype=my_dtype) 

In [12]: data 
Out[12]: 
array([(2014, b'South', b'Second Round', -24), 
     (2015, b'West', b'First Round', 48)], 
     dtype=[('Year', '<i8'), ('Region', 'S8'), ('Round', 'S16'), ('Diff', '<i8')]) 

您还可以使用dtype=None,让genfromtxt()确定数据类型为您提供:

In [13]: data = np.genfromtxt('regions.csv', delimiter=',', names=True, dtype=None) 

In [14]: data 
Out[14]: 
array([(2014, b'South', b'Second Round', -24), 
     (2015, b'West', b'First Round', 48)], 
     dtype=[('Year', '<i8'), ('Region', 'S5'), ('Round', 'S12'), ('Diff', '<i8')])