2017-09-27 14 views
0

Angenommen, ich habe folgende Daten:Benutzerdefinierte Datentyp mit Numpy Daten laden

1:-1 2:-1 3:0.213213 ... 
1:0.905906 2:-1 4:-1 ... 

Wenn die Daten als solche formatiert ist, [index]:[value], und dass der Wert in einer solchen Art und Weise importiert werden, dass jede Zeile repräsentiert eine Anordnung. So erwarte ich einen 2D-Array wie folgt aus:

array = ([[-1, -1, 0.213213, ...] 
     [0.905906, -1, NaN, -1, ...] 
     ]) 

Mit numpy.loadtxt (wenn es möglich ist), wie würde ich mich über das zu tun? Ich habe die Dokumentation für dtype gelesen, aber ich konnte einfach nicht die Daten importieren, wo der Schlüssel dem Index des Arrays und seinem entsprechenden Wert entspricht.

Antwort

0

Ich benutze read_csv von Pandas obwohl np.loadtxt funktioniert auch glaube ich.

import pandas as pd 

df = pd.read_csv('your_file', header=None, sep=' |:') 
df_new = pd.DataFrame(index=df.index, 
         columns=range(np.max(df.iloc[:, -2]))) # create empty dataframe 

# Iterate over rows and place values at correct position. 
for index, row in df.iterrows(): 
    idx = row[0::2].astype('int').values-1 
    vals = row[1::2].values 
    df_new.iloc[index, idx] = vals 

df_new.values 

Returns:

array([[-1.0, -1.0, 0.213213, nan], 
     [0.905906, -1.0, nan, -1.0]], dtype=object)