2016-03-02 10 views
7

Desideri importare solo un certo intervallo di dati da un foglio di calcolo Excel (formato .xlsm in quanto ha macro) in un dataframe panda. stava facendo in questo modo:In Panda, qual è l'equivalente di "nrows" di read_csv() da utilizzare in read_excel()?

data = pd.read_excel(filepath, header=0, skiprows=4, nrows= 20, parse_cols = "A:D") 

ma sembra che nrows funziona solo con read_csv()? Quale sarebbe l'equivalente per read_excel()?

+0

Non sembra che ci è una tale opzione. –

+1

Qualche suggerimento su come importare fino a determinate righe? – Gabriel

+0

Qualcosa come 'pd.read_excel (...). Head (50)' ti farà ottenere le prime 50 righe, ma ovviamente legge e scarta, quindi temo che non sia molto utile. Scusate. –

risposta

9

Se si conosce il numero di righe nel foglio Excel, è possibile utilizzare il parametro skip_footer per leggere la prima n - skip_footer righe del file, dove n è il numero totale di righe.

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html

Usage:

data = pd.read_excel(filepath, header=0, parse_cols = "A:D", skip_footer=80) 

Assumendo che il foglio di Excel dispone di 100 righe, questa linea sarebbe analizzare le prime 20 righe.

+0

Divertente, immagino che psicologicamente, "footer" sia associato a qualcosa di sottile (come un footer di una pagina fisica). Buona risposta. –

+0

@Erol Grazie per averlo fatto notare – Gabriel

3

Mi piacerebbe rendere più flessibile (estendere) @Erol's answer bit.

Partendo dal presupposto che non sappiamo il numero totale di righe nel foglio excel:

xl = pd.ExcelFile(filepath) 

# parsing first (index: 0) sheet 
total_rows = xl.book.sheet_by_index(0).nrows 

skiprows = 4 
nrows = 20 

# calc number of footer rows 
# (-1) - for the header row 
skip_footer = total_rows - nrows - skiprows - 1 

df = xl.parse(0, skiprows=skiprows, skip_footer=skip_footer, parse_cols="A:D") \ 
     .dropna(axis=1, how='all') 

.dropna(axis=1, how='all') scenderà tutte le colonne contenenti solo NaN s'

Problemi correlati