2016-07-19 3 views
0

Nur eine kurze Frage zu einer Anleitung, bevor ich meine Nerven gebrochen habe! :)Projektleitfaden - multiple cvs/Änderung am Datenrahmen

Ich habe mehrere CSV-Datei, die ich zu einer großen neuen CSV-Datei zusammenführen möchte.

Alle Dateien haben die gleiche genaue Struktur:

Muzicast V2;;;;;;;; 
Zoom mÈdia sur Virgin Radio;;;;;;;;; 
Sem. 16 : Du 15 avril 2016 au 21 avril 2016;;;;;;;;; 
;;;;;;;;; 
;;;;;;;;; 
TOP 40;;;;;;;;; 
Rg;Evo.;Rg-1;Artiste;Titre;Genre;Label;Audience;Nb.Diffs;Nb.Sem 
1;+3;4;Twenty One Pilots;Stressed out;Pop/Rock International;WEA;5 982 000;56;18 
2;+1;3;Coldplay;Hymn for the weekend;Pop/Rock International;WEA;5 933 000;55;13 
3;-2;1;Imany;Don't be so shy (Filatov & Karas remix);Dance;THINK ZIK;5 354 000;55;7 
4;-2;2;Lukas Graham;7 years;Pop/Rock International;POLYDOR;5 927 000;54;16 
5; =;5;Justin Bieber;Love yourself;Pop/Rock International;MERCURY GROUP;5 481 000;49;21 

Alle cvs-Dateien haben die gleiche Formatierung. Ich möchte: - jede Datei nacheinander öffnen/die ersten 10 Zeilen ignorieren - alle Infos mit ";" als Trennzeichen - Variablen am Anfang jeder Zeile einfügen
- schreiben Sie eine neue Datei mit allen Infos aus jeder Datei.

ich es geschafft, eine Datei zu öffnen und die Änderungen ich brauchte:

handle = open(file_dir+'/'+'virgin092016.csv','r') 

results = [] 

for line in handle : 
    line = '12;2016;'+line 
    line = line.lower() 
    line = line.strip() 
    line = line.split(';') 
    line = line[0],line[1],line[5] 
    results.append(line) 

    df = pd.DataFrame(results) 

print df 

ich, um mehrere Dateien und erstellen Sie ein Dataframe =

file_dir = "VIRGIN" 
main_df = pd.DataFrame() 
for i, file_name in enumerate(os.listdir(file_dir)): 

if i == 0 : 
    main_df = pd.read_csv(file_dir + "/" + file_name, sep=";") 
    main_df["file_name"] = file_name 


else : 
    current_df = pd.read_csv(file_dir + "/" + file_name, sep=";") 
    current_df["file_name"] = file_name 
    current_df = current_df 

    main_df = pd.concat([main_df,current_df],ignore_index=True) 

print main_df 

Aber jetzt habe ich ein Problem versucht öffnen verwaltet mach beide gleichzeitig.

Ich vermisse ein Teil und ich denke, es ist, weil ich nicht sicher bin, die Reihenfolge, die ich meinen Code tun muss.

Muss ich öffnen eine Datei die Änderungen vornehmen und dann direkt auf die MAIN.CSV schreiben (die die endgültigen Infos aller Dateien haben wird) und dann einen DataFrame machen ODER sollte ich eine Datei öffnen> tun a Datenrahmen und danach die Änderungen, die ich brauche.

Ich bin neu zu Python ... nehmen mehrere Online-Kurse und Bücher lesen .... aber ich fühle, dass ich immer noch nicht wirklich "Python" in meiner Art zu denken.

Hilfe wäre sehr willkommen. Dank

Antwort

0

ich alle Ihre CSV-Dateien unter der Annahme sind in "./data/", in main_dir definiert sind, und dass die Summe aller Ihrer csv nicht überschreitet Ihr RAM-Speicher. Der Trick besteht darin, eine temporäre Variable current_df zu verwenden und sie dann an einen endgültigen Datenrahmen final_df mit pd.concat anzufügen.

import os 
import pandas as pd 

main_dir = "./data/" 
all_files = os.listdir(main_dir) 

for i, file_name in enumerate(all_files): 
    current_df = pd.read_csv(main_dir+file_name, 
          sep=";", 
          skiprows=10) 

    #add here whatever information you need to your dataframe 
    #dump the results into a separate file with current_df.to_csv() 

    if i == 0: 
     final_df = current_df 
    else: 
     final_df = pd.concat([final_df, current_df], axis=0)