Leggere un file Excel in Python usando Panda


144

Sto cercando di leggere un file Excel in questo modo:

newFile = pd.ExcelFile(PATH\FileName.xlsx)
ParsedData = pd.io.parsers.ExcelFile.parse(newFile)

che genera un errore che dice due argomenti attesi, non so quale sia il secondo argomento e anche quello che sto cercando di ottenere qui è convertire un file Excel in un DataFrame, lo sto facendo nel modo giusto? o c'è un altro modo per farlo usando i panda?

Risposte:


223

Chiudi: prima chiami ExcelFile, ma poi chiami il .parsemetodo e gli passi il nome del foglio.

>>> xl = pd.ExcelFile("dummydata.xlsx")
>>> xl.sheet_names
[u'Sheet1', u'Sheet2', u'Sheet3']
>>> df = xl.parse("Sheet1")
>>> df.head()
                  Tid  dummy1    dummy2    dummy3    dummy4    dummy5  \
0 2006-09-01 00:00:00       0  5.894611  0.605211  3.842871  8.265307   
1 2006-09-01 01:00:00       0  5.712107  0.605211  3.416617  8.301360   
2 2006-09-01 02:00:00       0  5.105300  0.605211  3.090865  8.335395   
3 2006-09-01 03:00:00       0  4.098209  0.605211  3.198452  8.170187   
4 2006-09-01 04:00:00       0  3.338196  0.605211  2.970015  7.765058   

     dummy6  dummy7    dummy8    dummy9  
0  0.623354       0  2.579108  2.681728  
1  0.554211       0  7.210000  3.028614  
2  0.567841       0  6.940000  3.644147  
3  0.581470       0  6.630000  4.016155  
4  0.595100       0  6.350000  3.974442  

Quello che stai facendo è chiamare il metodo che vive sulla classe stessa, piuttosto che sull'istanza, il che va bene (anche se non molto idiomatico), ma se lo stai facendo dovresti anche passare il nome del foglio:

>>> parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")
>>> parsed.columns
Index([u'Tid', u'dummy1', u'dummy2', u'dummy3', u'dummy4', u'dummy5', u'dummy6', u'dummy7', u'dummy8', u'dummy9'], dtype=object)

6
quando uso "df = xl.parse (" Foglio1 ")", prende automaticamente il valore della prima cella di ogni colonna come nomi di colonna del frame di dati, come posso specificare i miei nomi di colonna?
Rakesh Adhikesavan,

2
In Panda 15.0.2, parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")non funziona e genera errori module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")funziona per me
Neil,

Bello. Questo è quasi accurato come si ottiene lo stesso accesso a una scheda openpyxl. Panda sta chiamando openpyxl sotto il cofano?
Pyderman,

2
Come si impedisce che trasforma la prima riga in intestazioni? Ho provato ad usare il parametro headers=Nonema anche se non ha rotto il codice, non ha funzionato neanche.
Elliptica,

8
Ho scoperto che pip install xlrd è necessario affinché questo funzioni. Il pacchetto xlrd non viene fornito con Panda, quindi se non lo hai installato per qualche altro scopo, otterrai un'eccezione "ImportError: Nessun modulo chiamato xlrd". Vero come panda 0.19.0 su Mac, in ogni caso.
utente5920660

95

Questo è un modo molto semplice e facile.

import pandas
df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname='Sheet 1')
# or using sheet index starting 0
df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname=2)

controlla i dettagli completi della documentazione http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: la sheetnameparola chiave è obsoleta per le versioni Pandas più recenti, utilizzare sheet_nameinvece.


20

Ho pensato di aggiungere qui, che se si desidera accedere a righe o colonne per attraversarli, si procede in questo modo:

import pandas as pd

# open the file
xlsx = pd.ExcelFile(PATH\FileName.xlsx)

# get the first sheet as an object
sheet1 = xlsx.parse(0)

# get the first column as a list you can loop through
# where the is 0 in the code below change to the row or column number you want    
column = sheet1.icol(0).real

# get the first row as a list you can loop through
row = sheet1.irow(0).real

Modificare:

I metodi icol(i)e irow(i)sono obsoleti ora. Puoi usare sheet1.iloc[:,i]per ottenere l'i-esimo col e sheet1.iloc[i,:]per ottenere l'i-esima riga.


13

Penso che questo dovrebbe soddisfare le tue esigenze:

import pandas as pd

# Read the excel sheet to pandas dataframe
DataFrame = pd.read_excel("PATH\FileName.xlsx", sheetname=0)

0

Devi solo alimentare il percorso del tuo file pd.read_excel

import pandas as pd

file_path = "./my_excel.xlsx"
data_frame = pd.read_excel(file_path)

Consulta la documentazione per esplorare parametri come skiprowsignorare le righe durante il caricamento di Excel



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.