2017-04-24 14 views
0

私は(私は簡単にするためにいくつかの列を削除した)のようなフォーマットされたCSVでのいくつかのデータを持っている: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の形式を使用します。

ます。また dtype=Noneを使用して genfromtxt()はあなたのためのデータ型を決定させることができ
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')]) 

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')]) 
関連する問題