2016-06-28 26 views
6

Attualmente ho questo codice. Funziona perfettamente.Aggiungi un foglio excel esistente con un nuovo dataframe usando i panda pitone

E 'loop attraverso i file di Excel in una cartella, rimuove le prime 2 file, Poi li salva come singoli file excel, e salva anche il file nel loop come file allegato.

Attualmente il file allegato sovrascrive lo il file esistente ogni volta che eseguo il codice.

ho bisogno di aggiungere i nuovi dati al fondo della già esistente eccelle foglio ('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')) 

ho pensato che questo sarebbe stato un compito semplice, ma credo di no. Penso di aver bisogno di portare il file master_data.xlsx come un dataframe, quindi abbinare l'indice con i nuovi dati aggiunti e salvarlo nuovamente. O forse c'è un modo più semplice. Qualsiasi aiuto è apprezzato.

+0

è [che] (http://stackoverflow.com/a/36450435/5741205) cosa stai cercando? – MaxU

+0

no, non proprio, non sto cercando di salvare nuovi fogli, semplicemente provando ad aggiungere il foglio esistente. – brandog

risposta

8

È possibile utilizzare openpyxl motore in combinazione con startrow parametro:

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 si può anche voler specificare se si header=None non voglio duplicare i nomi delle colonne ...

UPDAT E: potresti anche voler controllare this solution

+0

Ehi, grazie, devo usarlo. (In realtà non sto rimuovendo solo 2 righe di dati, era solo un segnaposto per una grande quantità di formattazione.) Ne ho bisogno per accodarlo alla fine del foglio esistente, senza la riga dell'indice. – brandog

+0

@brandog, quindi dovrai usare 'header = None' e dovrai contare il numero corrente di righe nel file excel e usarlo in questo modo:' startrow = curr_count + 1' – MaxU

+0

OH, whoops! Mi manca leggere. Sì, questo risponde alla mia domanda perfettamente! Grazie – brandog

Problemi correlati