2017-07-10 4 views
0

Ich habe eine CSV-Datei, die etwa 100 Spalten von Daten enthält. Jede Spalte stellt Temperaturwerte dar, die alle 15 Minuten während des Tages für jeden der 100 Tage genommen werden. Die Kopfzeile jeder Spalte ist das Datum für diesen Tag. Ich möchte dies in zwei Spalten konvertieren, wobei die erste das Datum Zeit (ich werde das irgendwie haben erstellen), und die zweite, die Temperaturen auf der jeweils anderen für jeden Tag gestapelt sind.Append mehr Spalten in zwei Spalten Python

Mein Versuch:

with open("original_file.csv") as ofile: 
    stack_vec = [] 
    next(ofile) 
    for line in ofile:    
     columns = lineo.split(',') # get all the columns   
     for i in range (0,len(columns)): 
      stack_vec.append(columnso[i]) 
      np.savetxt("converted.csv",stack_vec, delimiter=",", fmt='%s') 

In meinem Versuch, Ich versuche, einen neuen Vektor mit jedem an das Ende angefügt Spalte zu erstellen. Der Code ist jedoch extrem langsam und funktioniert wahrscheinlich nicht! Sobald ich diesen Schritt herausgefunden habe, muss ich das Datum von jeder Spalte nehmen und 15 Minuten zur Datumzeit für jede Reihe hinzufügen. Jede Hilfe würde sehr geschätzt werden.

+0

Für .csv Ich empfehle immer die numpy Funktion „genfromtext“ verwenden. CSVData = genfromtxt ('original_file.csv', delimiter = '') Danach können Sie mit CSVData arbeiten wie jeder andere numpy Array, ohne wie End-of-line-Charakter über die Dinge zu kümmern und so weiter. Außerdem sollte es ziemlich schnell sein. Was meinst du mit "wahrscheinlich nicht funktioniert"? – offeltoffel

+0

Danke für den Tipp. Wahrscheinlich funktioniert es nicht, ich meine, das Programm läuft, aber nicht abgeschlossen. Ich beende es nach ungefähr 5 Minuten oder so. – Sjoseph

+0

Ich verstehe. Eine Sache, die mir auffällt ist, dass Sie np.savetxt innerhalb Ihrer Schleife über alle 100 Spalten haben. So wird die gleiche Datei immer wieder gespeichert. Wie auch immer, du solltest Marvins Antwort in Betracht ziehen. Er verwendet auch genfromtext und erklärt im Detail, wie Sie es in Ihrer Situation verwenden würden. – offeltoffel

Antwort

1

Wenn ich habe diese korrekt Sie eine csv mit 96 Zeilen und 100 Spalten und in in einen Vektor, Tag für Tag zu einem Vektor mit 960 Einträgen stapeln wollen, nicht wahr?

Ein würde leicht Ansatz verwendet numpy sein:

import numpy as np 

    x = np.genfromtxt('original_file.csv', delimiter=',') 
    data = x.ravel(order ='F') 

Hinweis numpy eine fremde Bibliothek aber die Go-to-Bibliothek für Mathematik. die erste Zeile wird die CSV in eine ndarray lesen, die wie Matrix mit ravel

Dann (auch nicht durch sie für mathematische Operationen anders verhält) vektorisieren Sie es. Die oder ist so, dass sie Zeilen aufeinander statt Spalten gestapelt, d. h. Tag für Tag. (Lassen Sie es als Standard/leer, wenn Sie einen Zeitpunkt nach dem anderen wollen)

Für Ihr Datum Problem siehe How can I make a python numpy arange of datetime Ich denke, ich könnte kein besseres Beispiel geben.

Wenn Sie diese zwei Array haben, können Sie die Form durch x.reshape(960,1) sichern und dann mit np.concatenate([x,dates], axis = 1) mit Daten, die Sie Datum Vektor sind.