Seite 1 von 1

Zusammenfügen von csv-Dateien

Verfasst: Mittwoch 28. Januar 2015, 15:47
von Lienz20013
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',])))

Re: Zusammenfügen von csv-Dateien

Verfasst: Mittwoch 28. Januar 2015, 15:50
von sparrow
Was genau funktioniert denn nicht, oder was ist deine konkrete Frage?

Re: Zusammenfügen von csv-Dateien

Verfasst: Mittwoch 28. Januar 2015, 16:17
von Lienz20013
Also ich habe fünf csv Dateien aber er liest mir nur die letzte ein. Ich kann nur mit der letzten arbeiten.

Re: Zusammenfügen von csv-Dateien

Verfasst: Mittwoch 28. Januar 2015, 16:23
von cofi
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, ...))

Re: Zusammenfügen von csv-Dateien

Verfasst: Mittwoch 28. Januar 2015, 16:37
von 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.