2016-06-28 8 views
6

Ich habe derzeit diesen Code. Es funktioniert perfekt.Anfügen vorhandener Excel-Tabelle mit neuen Datenrahmen mit Python Pandas

Es Schleifen durch Excel-Dateien in einem Ordner entfernt die ersten zwei Zeilen, speichert sich dann heraus als einzelne Excel-Dateien, und es spart auch die Dateien in der Schleife als Datei angehängt.

Derzeit überschreibt die angehängte Datei die vorhandene Datei jedes Mal, wenn ich den Code ausführen.

Ich brauche die neuen Daten an die Unterseite des bereits Excel-Blatt bestehende anhängen ('master_data.xlsx)

dfList = [] 
path = 'C:\\Test\\TestRawFile' 
newpath = 'C:\\Path\\To\\New\\Folder' 

for fn in os.listdir(path): 
    # Absolute file path 
    file = os.path.join(path, fn) 
    if os.path.isfile(file): 
    # Import the excel file and call it xlsx_file 
    xlsx_file = pd.ExcelFile(file) 
    # View the excel files sheet names 
    xlsx_file.sheet_names 
    # Load the xlsx files Data sheet as a dataframe 
    df = xlsx_file.parse('Sheet1',header= None) 
    df_NoHeader = df[2:] 
    data = df_NoHeader 
    # Save individual dataframe 
    data.to_excel(os.path.join(newpath, fn)) 

    dfList.append(data) 

appended_data = pd.concat(dfList) 
appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx')) 

Ich dachte, das eine einfache Aufgabe sein würde, aber ich denke nicht. Ich denke, ich muss die Datei master_data.xlsx als Datenframe einbringen, dann den Index mit den neuen angehängten Daten abgleichen und sie wieder speichern. Oder vielleicht gibt es einen einfacheren Weg. Jede Hilfe wird geschätzt.

+0

ist [that] (http://stackoverflow.com/a/36450435/5741205), was Sie suchen? – MaxU

+0

nein, nicht ganz, ich versuche nicht, neue Blätter zu speichern, versuche nur, das vorhandene Blatt anzuhängen. – brandog

Antwort

8

Sie können openpyxl Motor in Verbindung mit startrow Parameter verwenden:

In [48]: writer = pd.ExcelWriter('c:/temp/test.xlsx', engine='openpyxl') 

In [49]: df.to_excel(writer, index=False) 

In [50]: df.to_excel(writer, startrow=len(df)+2, index=False) 

In [51]: writer.save() 

c: /temp/test.xlsx:

enter image description here

PS können Sie auch wollen header=None wenn Sie angeben, Spaltennamen nicht duplizieren wollen ...

UPDAT E: Sie können auch überprüfen, this solution

+0

Hey danke, ich soll das benutzen. (Ich entferne nicht nur 2 Zeilen Daten, das war nur ein Platzhalter für eine große Menge an Formatierung.) Ich brauche es an den unteren Rand des vorhandenen Blattes ohne die Indexlinie anzuhängen. – brandog

+0

@brand, dann müssen Sie 'header = None' verwenden und Sie müssen die aktuelle Anzahl der Zeilen in der Excel-Datei zählen und sie wie folgt verwenden:' starrow = curr_count + 1' – MaxU

+0

OH, hoppla! Ich vermisse es zu lesen. Ja das beantwortet meine Frage perfekt! Danke – brandog