2013-11-04 20 views
5

Sto cercando di caricare un set di dati che assomiglia a questo:NumPy tipo di dati loadtxt

Algeria,73.131000,6406.8166213983,0.1 
Angola,51.093000,5519.1831786593,2 
Argentina,75.901000,15741.0457726686,0.5 
Armenia,74.241000,4748.9285847709,0.1 

ecc Alla fine, ho bisogno solo colonne 1 e 2. Non avrò bisogno di nomi di paesi e l'ultima colonna. Essenzialmente, ho bisogno di estrarre due matrici con dimensioni nx1. So che ho bisogno di specificare il tipo di dati:

data=np.loadtxt('file.txt',delimiter=',',dtype=[('f0',str),('f1',float),('f2',float),('f3',float)]) 

Tuttavia, questo produce una lista di tuple,

array([('', 73.131, 6406.8166213983, 0.1), 
    ('', 51.093, 5519.1831786593, 2.0),` 

invece di

array(['',73.131,6406.8166213983,0.1], 
     ['',51.093, 5519.1831786593, 2.0], 

Dov'è l'errore?

+0

FWIW, l'output non è una lista di tuple, ma un [matrice strutturata ] (http://docs.scipy.org/doc/numpy/user/basics.rec.html). L'output desiderato, con la stringa vuota all'inizio di ogni riga, non è un'opzione perché ha dtypes misti. Usare solo le righe '(1,2)' rende questo problema irrilevante, dato che sono entrambi float. – askewchan

risposta

1

Se si desidera solo le prime due colonne che si potrebbe usare genfromtxt:

import numpy as np 
col1 = np.genfromtxt('yourfile.txt',usecols=(1),delimiter=',',dtype=None) 
col2 = np.genfromtxt('yourfile.txt',usecols=(2),delimiter=',',dtype=None) 

o entrambe insieme:

np.genfromtxt('yourfile.txt',usecols=(1,2),delimiter=',',dtype=None) 
0

Il tuo "errore" è che hai impostato il tuo dtype. Se non vuoi il dtype che hai impostato (dove non vedo perché non lo vuoi), puoi usare i parametri skiprows e usecols di np.loadtxt() per caricare SOLO le colonne che desideri.

Il risultato sarà un array NumPy con una forma di (n, 2), non (n, 3) che si pensava di avere (dove n è il numero di righe).

10

Controllare la documentazione NumPy's.

x, y = np.loadtxt(c, delimiter=',', usecols=(1, 2), unpack=True) 

Il parametro usecols dovrebbe portare a termine il lavoro.

+0

Questa è la risposta migliore, ma con 'usecols = (1, 2)' per abbinare la richiesta dell'OP. – askewchan