Lire un fichier Excel en python à l'aide de pandas


144

J'essaye de lire un fichier Excel de cette façon:

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

qui jette une erreur qui dit deux arguments attendus, je ne sais pas quel est le deuxième argument et ce que j'essaie de réaliser ici est de convertir un fichier Excel en DataFrame, est-ce que je le fais de la bonne manière? ou y a-t-il un autre moyen de le faire en utilisant des pandas?

Réponses:


223

Fermer: vous appelez d'abord ExcelFile, puis vous appelez la .parseméthode et lui transmettez le nom de la feuille.

>>> 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  

Ce que vous faites, c'est appeler la méthode qui vit sur la classe elle-même, plutôt que sur l'instance, ce qui est correct (bien que pas très idiomatique), mais si vous faites cela, vous devrez également passer le nom de la feuille:

>>> 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
lorsque j'utilise "df = xl.parse (" Sheet1 ")", il prend automatiquement la valeur de la première cellule de chaque colonne comme noms de colonne du dataframe, comment spécifier mes propres noms de colonne?
Rakesh Adhikesavan

2
Dans pandas 15.0.2, parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")ne fonctionne pas et génère une erreur module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")travaille pour moi
Neil

Agréable. C'est presque aussi soigné que la façon dont le même accès à un onglet est obtenu en utilisant openpyxl. Les pandas appellent-ils openpyxl sous le capot?
Pyderman

2
Comment l'empêcher de transformer la première rangée en en-têtes? J'ai essayé d'utiliser le paramètre headers=Nonemais même s'il n'a pas cassé le code, cela n'a pas fonctionné non plus.
Elliptica

8
J'ai découvert que pip install xlrd est nécessaire pour que cela fonctionne. Le paquet xlrd n'est pas livré avec pandas, donc si vous ne l'avez pas installé dans un autre but, vous obtiendrez une exception "ImportError: No module named xlrd". C'est vrai depuis pandas 0.19.0 sur Mac, en tout cas.
user5920660

95

C'est un moyen très simple et 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)

consultez la documentation complète en détails http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: le sheetnamemot-clé est obsolète pour les nouvelles versions de Pandas, utilisez-le à la sheet_nameplace.


20

Je pensais que je devrais ajouter ici, que si vous voulez accéder aux lignes ou aux colonnes pour les parcourir, faites ceci:

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

Éditer:

Les méthodes icol(i)et irow(i)sont maintenant obsolètes. Vous pouvez utiliser sheet1.iloc[:,i]pour obtenir le i-ème col et sheet1.iloc[i,:]pour obtenir la i-ème ligne.


13

Je pense que cela devrait satisfaire votre besoin:

import pandas as pd

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

0

Il vous suffit de fournir le chemin de votre fichier à pd.read_excel

import pandas as pd

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

Consultez la documentation pour explorer les paramètres comme skiprowsignorer les lignes lors du chargement d'Excel



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.