2017-10-11 3 views
1

ich einen Code geschrieben haben, um mehrere Dateien zu lesen, um die Daten zu formatieren und sie zu einem einzigen Datenrahmen verschmelzen:Zusammenführen mehrerer Dateien in einem einzigen Datenrahmen

import os.path 
import glob 

def get_merged_file(flist, **kwargs): 
    fdf=pd.DataFrame() 
    for f in flist: 
     df=pd.read_excel(f, **kwargs) 
     df=df.iloc[4:-1] 
     df.columns=df.iloc[0] 
     df=df.iloc[1:].reset_index(drop=True) 
     df = df.iloc[:, :-4] 
     fdf.append(df) 
    return fdf 

path='S:/random path' 

fls = os.path.join(path, 'Report*.xls') 

dff = get_merged_file(glob.glob(fls)) 
print(dff) 

Aber diese zurückkehrt

leeren Datenrahmen

Spalten: []

Index: []

All Hilfe würde sehr geschätzt werden.

+1

1. zuweisen zurück 'fdf = fdf.append (df)' – Wen

+0

@Wen ist richtig. Ich antwortete jedoch mit einem meiner Meinung nach besseren Muster für Sie. – piRSquared

+0

Danke Wen, das hat funktioniert! – Mohnish

Antwort

0

Ich denke, es ist besser, eine Funktion einen geparsten Datenrahmen zurückgeben und pd.concat verwenden, um sie zusammen zu setzen.

import os.path 
import glob 

def get_file(fp, **kwargs): 
    df = pd.read_excel(f, **kwargs) 
    df = df.iloc[4:-1] 
    df.columns = df.iloc[0] 
    df = df.iloc[1:].reset_index(drop=True) 
    df = df.iloc[:, :-4] 
    return df 

path='S:/random path' 

fls = os.path.join(path, 'Report*.xls') 

dff = pd.concat([get_file(f) for f in glob.glob(fls)]) 
print(dff) 
+0

Warum ist das besser als die Kombination der beiden Funktionen? – Mohnish

+0

Wenn Sie mehr als 2 Dateien verwenden, erstellen Sie einen Master-Datenrahmen und hängen ihn für jede Datei an, die Sie erhalten. Das Muster, das ich gegeben habe, hat die gleiche Menge an Parsing, aber lassen wir Pandas das Kombinieren in einem Schritt im Gegensatz zu n Schritten behandeln. – piRSquared

+0

Sie können das 'pd.concat' auch in eine Funktion einfügen. Ich schlage nur vor, 'pd.concat' im Gegensatz zu einer Reihe von' append' zu verwenden – piRSquared

Verwandte Themen