2017-04-24 128 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')])