2017-07-15 3 views
1

Einfache Frage - ich tue das folgende:beschleunigen Pandas csv lesen und nachfolgende gesenkten

train_set = pd.read_csv('./input/train_1.csv').fillna(0) 
for col in train_set.columns[1:]: 
    train_set[col] = pd.to_numeric(train_set[col],downcast='integer') 

erste Spalte der Datenrahmen ist ein String - der Rest sind ints. Read_csv gibt Floats, die ich nicht brauche. Das Downsampling führt zu einer Reduzierung des verwendeten Arbeitsspeichers um fast 50%, verlangsamt den Prozess jedoch erheblich. Kann ich das Ganze in einem Schritt machen? Oder weiß jemand, wie man dies multithread?
thx

Antwort

3

Ich würde vorschlagen, dass Sie diese beiden Funktionen versuchen und wieder die Leistung sehen:

  1. konvertieren, wenn Sie die Datei

    # or uint8/int16/int64 depends on your data 
    pd.read_csv('input.txt', sep=' ', dtype=np.int32) 
    
    # or you can use converters with lambda function 
    pd.read_csv('test.csv', sep=' ', converters={'1':lambda x : int(x)}) 
    
  2. Konvertieren Sie Ihre Datenrahmen nach

    Datei zu lesen lesen

    df['MyColumnName'] = df['MyColumnName'].astype(int)

+0

hmm Ich sehe die Idee, aber das Problem ist, dass die erste Zeile eine Zeichenfolge ist. Das Angeben des D-Typs im Leseprozess funktioniert nicht mit der Zeichenfolge. Würden Sie sie separat lesen? Können wir die Reihenfolge bewahren? – dv3

+0

Ich habe den Code bearbeitet. die konverter hat man auch bei mir – imanzabet

+0

richtig gemacht - der code funktioniert wieder, löst aber das problem nicht. Dies konvertiert die Spalte mit dem Namen '1' in Ints. Ich habe die erste Spalte als String und den Rest (insgesamt 551) als Floats, die ich gerne konvertieren würde. – dv3

Verwandte Themen