2017-04-24 5 views
0

Ich habe einige Daten in einer CSV, die als solche formatiert ist (ich einige Spalten der Einfachheit halber gelöscht):Numpy akzeptiert Strings nicht korrekt?

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

Ich möchte in dem sowohl die String-Daten in den Region und Round Spalten und die Integer-Daten verwenden, Diff Spalte.

Hier ist mein entsprechender Code:

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 

Wenn ich meine Daten zu drucken, ich folgende bekommen. NumPy macht jede Zeichenfolge zu einer leeren Zeichenfolge.

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

Weiß jemand, wie ich das beheben könnte? Benutze ich das dtype-Attribut falsch? Oder etwas anderes? Danke im Voraus.

Antwort

1

Statt str für den Datentyp der Textfelder setzen, verwenden Sie das S Format mit einer maximalen String-Länge:

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

Sie auch dtype=None verwenden können, und lassen Sie genfromtxt() den Datentyp für Sie bestimmen:

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')]) 
Verwandte Themen