for schleife- read csv file in for schleife and create a dataframe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hiasit00
User
Beiträge: 3
Registriert: Donnerstag 21. Dezember 2017, 12:32

Hallo Leute,

ich habe mir eine For-Schleife aufgebaut die ersteinmal frei csv file "nacheinander" lesen soll und relevante Werte in ein Dataframe einfügen soll.
Meine Schleife klappt zwar gut aber ich erhalte im Dataframe leider nur die aus der zuletzt gelesenen csv file die Werte. Alle anderen aus den zwei vorherigen verschwinden. Wie kann ich dies lösen? Ist eine weitere Schleife sinnvoll? oder muss ich es mit einer Methode lösen die in das selbe Dataframe beim jeden lesen des Csv files schreibt.

mein bisheriger Code sieht so aus:

Code: Alles auswählen



import pandas as pd
import glob
import numpy as np
import gc

dir='Z:/home/csv_files'
filenames = glob.glob(dir + "/*.csv")


for filename in filenames[:3]:
    df=pd.read_csv(filename)
    print(df.head())
    
    data_actual=df[['time_stamp','scrdev_pupmp (hpa)','time_vector (ms)','coscr_stsub ()']] 
        
    P0=data_actual['Druck)'][(data_actual['timer']==32) &(data_actual['timer'].shift(-1)==3)]
    P1=data_actual['Druck)'][(data_actual['timer']==9) &(data_actual['timer'].shift(-1)==36)]
    P2=data_actual['Druck)'][(data_actual['timer']==3) &(data_actual['timer'].shift(-1)==9)]
    P3=data_actual['Druck)'][(data_actual['timer']==1) &(data_actual['timer'].shift(-1)==5)]
   
    P=[P0,P1,P2,P3,P4]
    Pvalues=[ "P0","P1","P3", "P3", "P4"]
    P_frame=pd.DataFrame(P,index=Pvalues)


das klappt alles super nur die Schleife liest die Files ein ohne die reingeschriebenen Werte in das Dataframe zu behalten. (Oder er schreibt nur das letzte eingelesene csv File).

Hoffentlich könnt ihr mir weiterhelfe.

Vielen Dank :)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@hiasit00: den Import von `gc` brauchst Du nicht und wirst Du auch nie brauchen. Du mußt dir alle DataFrames in einer Liste merken, und sie nach der Schleife zu einem concatenieren.
hiasit00
User
Beiträge: 3
Registriert: Donnerstag 21. Dezember 2017, 12:32

Sirius3 hat geschrieben:@hiasit00: den Import von `gc` brauchst Du nicht und wirst Du auch nie brauchen. Du mußt dir alle DataFrames in einer Liste merken, und sie nach der Schleife zu einem concatenieren.

Vielen Dank für deine Rückmeldung :)

das Problem ist dass ich ja nicht mal für jedes eingelesene File ein dataframe mit meiner Schleife erstellen kann. Es wird leider nichts gemerkt..Das war ja meine Frage wie ich dies machen kann...

oder meinst du was anderes.. habe etwas mit tolist() gefunden wäre dies der richtige Ansatz.

Ein Vorschlag?? Vielen lieben Dank im Voraus...
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du erzeugst in der for-Schleife einen dataframe. Und dann schmeißt du ihn weg, weil du in der nächsten iteration einen neuen erzeugst, unter dem alten Namen. Und der letzte bleibt dann übrig :K

Wenn du alle willst, musst du sie in einer Liste aufsammeln. Und danach zusammenführen. Oder erst einen erzeugen, und danach für die restlichen Dateien eine for-Schleife bauen, und da einen neuen Frame erzeugen und dann an den ersten anhängen.
Antworten