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?

Rakesh Adhikesavan
la source

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)
DSM
la source
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.

Murali Mopuru
la source
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.

Dr Manhattan
la source
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)
Ajay Sant
la source
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

ted
la source
0
import pandas as pd

data = pd.read_excel (r'**YourPath**.xlsx')

print (data)
Suthura Sudharaka
la source
0

Voici une méthode mise à jour avec une syntaxe plus courante dans le code python. Cela vous empêche également d'ouvrir le même fichier plusieurs fois.

import pandas as pd

sheet1, sheet2 = None, None
with pd.ExcelFile("PATH\FileName.xlsx") as reader:
    sheet1 = pd.read_excel(reader, sheet_name='Sheet1')
    sheet2 = pd.read_excel(reader, sheet_name='Sheet2')

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

Quinn
la source