Domanda Utilizzo di Panda su pd.read_excel () per più fogli di lavoro della stessa cartella di lavoro


Ho un grande file di foglio di calcolo (.xlsx) che sto elaborando usando i panda python. Succede che ho bisogno di dati da due schede in quel file di grandi dimensioni. Una delle schede ha una tonnellata di dati e l'altra è composta da poche celle quadrate.

Quando lo uso pd.read_excel () sopra qualunque foglio di lavoro, mi sembra che l'intero file sia caricato (non solo il foglio di lavoro che mi interessa). Quindi quando uso il metodo due volte (una volta per ogni foglio), devo effettivamente subire l'intera cartella di lavoro in lettura due volte (anche se stiamo usando solo il foglio specificato).

Sto usando male o è limitato in questo modo?

Grazie!


44
2017-10-23 04:21


origine


risposte:


Provare pd.ExcelFile:

xls = pd.ExcelFile('path_to_file.xls')
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')

Come notato da @HaPsantran, durante il file viene letto l'intero file Excel ExcelFile() chiamare (non sembra essere un modo per aggirare questo). Ciò ti evita semplicemente di dover leggere lo stesso file ogni volta che vuoi accedere a un nuovo foglio.

Si noti che il sheet_name argomento a pd.read_excel() può essere il nome del foglio (come sopra), un intero che specifica il numero del foglio (es. 0, 1, ecc.), un elenco di nomi o indici di fogli, oppure None. Se viene fornito un elenco, restituisce un dizionario in cui le chiavi sono i nomi / gli indici dei fogli ei valori sono i frame dei dati. L'impostazione predefinita è semplicemente restituire il primo foglio (es. sheet_name=0).

Se None è specificato, tutti i fogli sono restituiti, come a {sheet_name:dataframe} dizionario.


56
2017-10-23 05:16



Puoi anche usare l'indice per il foglio:

xls = pd.ExcelFile('path_to_file.xls')
sheet1 = xls.parse(0)

darà il primo foglio di lavoro. per il secondo foglio di lavoro:

sheet2 = xls.parse(1)

19
2018-02-25 22:58



Ci sono 3 opzioni:

  1. Leggi il primo foglio direttamente in dataframe
  2. Leggi il file excel e ottieni un elenco di fogli. Quindi scegli e carica i fogli.
  3. Leggi tutti i fogli e memorizzali in un dizionario.

Esempio di codice:

import pandas as pd

df = pd.read_excel('excel_file_path.xls')
# this will read the first sheet into df

xls = pd.ExcelFile('excel_file_path.xls')

# Now you can list all sheets in the file
xls.sheet_names
# ['house', 'house_extra', ...]

# to read just one sheet to dataframe:
df = pd.read_excel(file_name, sheetname="house")

# to read all sheets to a map
sheet_to_df_map = {}
for sheet_name in xls.sheet_names:
    sheet_to_df_map[sheet_name] = xls.parse(sheet_name)

Aggiornare:

# @ihightower pointed out in the comments that all sheets can be 
# directly read into an ordered dictionary in 1 step

# for pandas version >= 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheet_name=None)

# for pandas version < 0.21.0
sheet_to_df_map = pd.read_excel(file_name, sheetname=None)

Aggiornamento 2: grazie a @toto_tico per averlo indicato.

sheetname: string, int, lista mista di stringhe / int, o None, default 0   Obsoleto dalla versione 0.21.0: utilizzare invece sheet_name Link sorgente


19
2017-09-06 18:16



Puoi anche specificare il nome del foglio come parametro:

data_file = pd.read_excel('path_to_file.xls', sheetname="sheet_name")

caricherà solo il foglio "sheet_name"


11
2018-02-11 19:37