Zusammenfügen von csv-Dateien

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
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Hi ich habe eine Frage wie ich viele csv-Dateien einlesen kann mir die spalten die für mich wichtig sind herausnehmen kann un am ende alle in eine csv-Datei wieder schreiben kann.
Bis jetzt hab ich:

Code: Alles auswählen

file = glob.glob('data/Elastische_Eigenschaften/*.csv')
for j in range(len(file)):    
    aa = file[j]
    in_file = open(aa)     
    data_elast = (pd.io.parsers.read_csv(in_file,"rb",
                                   delimiter=';',decimal=',' 
                                   ,usecols=[0,7,8,9,10,11,12,13,14,15,16],
                                    names=(['pos','vp','err_vp','vs'
                                    ,'err_vs','poission','err_poission','E'
                                    ,'err_E','G','err_G',])))
Benutzeravatar
sparrow
User
Beiträge: 4600
Registriert: Freitag 17. April 2009, 10:28

Was genau funktioniert denn nicht, oder was ist deine konkrete Frage?
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Also ich habe fünf csv Dateien aber er liest mir nur die letzte ein. Ich kann nur mit der letzten arbeiten.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Genau das hast du ja auch geschrieben. Wenn du alle haben willst, solltest du sie auch in einer Liste sammeln:

Code: Alles auswählen

sources = glob.glob(...)
data_elast = []
for source in sources:
    with open(source) as f:
        data_elast.append(pd.io.parsers.read_csv(f, ...))
BlackJack

@Lienz20013: Der gezeigte Code liest alle Dateien ein. Am Ende ist natürlich nur die letzte an den Namen `data_elast` gebunden. Denn genau das sagst Du in dem Code ja, das jedes mal die eingelesene Datei an diesen Namen gebunden werden soll.

Die Schleife ist so wie sie da steht in Python übrigens ein „anti pattern”. Du kannst direkt mit ``for`` über die Elemente von `file` (was eigentlich `filenames` heissen sollte weil es a) für einen Containertyp steht, also Mehrzahl und b) keine Dateien sondern Dateinamen enthält) iterieren, ohne dem Umweg über einen Index (`j`) gehen zu müssen.

Ergänzend zu cofi: Schau Dir mal die `concat()`-Funktion bei Pandas an.
Antworten