Lesen einer Excel-Datei in Python mit Pandas

144

Ich versuche, eine Excel-Datei folgendermaßen zu lesen:

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

Was einen Fehler auslöst, der besagt, dass zwei Argumente erwartet werden. Ich weiß nicht, was das zweite Argument ist. Außerdem versuche ich hier, eine Excel-Datei in einen DataFrame zu konvertieren. Mache ich das richtig? oder gibt es eine andere möglichkeit dies mit pandas zu tun?

Rakesh Adhikesavan
quelle

Antworten:

222

Schließen: Zuerst rufen Sie auf ExcelFile, dann rufen Sie die .parseMethode auf und übergeben ihr den Blattnamen.

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

Sie rufen die Methode auf, die in der Klasse selbst lebt, und nicht die Instanz, was in Ordnung ist (obwohl nicht sehr idiomatisch). Wenn Sie dies tun, müssen Sie auch den Blattnamen übergeben:

>>> 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
quelle
6
Wenn ich "df = xl.parse (" Sheet1 ")" verwende, wird automatisch der Wert der ersten Zelle jeder Spalte als Spaltenname des Datenrahmens verwendet. Wie gebe ich meine eigenen Spaltennamen an?
Rakesh Adhikesavan
2
In Pandas 15.0.2 parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")funktioniert nicht und wirft Fehler module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")arbeitet für mich
Neil
Nett. Dies ist fast so ordentlich wie der gleiche Zugriff auf eine Registerkarte mit openpyxl. Rufen Pandas Openpyxl unter der Haube?
Pyderman
2
Wie verhindern Sie, dass die erste Zeile in Überschriften umgewandelt wird? Ich habe versucht, den Parameter zu verwenden, headers=Noneaber obwohl er den Code nicht beschädigte, funktionierte er auch nicht.
Elliptica
8
Ich habe festgestellt, dass pip install xlrd benötigt wird, damit dies funktioniert. Das xlrd-Paket enthält keine Pandas. Wenn Sie es also nicht für einen anderen Zweck installiert haben, wird die Ausnahme "ImportError: Kein Modul namens xlrd" angezeigt. Jedenfalls ab Pandas 0.19.0 auf dem Mac.
user5920660
95

Dies ist sehr einfach und leicht.

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)

Weitere Informationen finden Sie in der Dokumentation unter http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: Das sheetnameSchlüsselwort ist für neuere Pandas-Versionen veraltet. Verwenden Sie sheet_namestattdessen.

Murali Mopuru
quelle
20

Ich dachte, ich sollte hier hinzufügen, dass Sie Folgendes tun, wenn Sie auf Zeilen oder Spalten zugreifen möchten, um diese zu durchlaufen:

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

Bearbeiten:

Die Methoden icol(i)und irow(i)sind jetzt veraltet. Sie können verwenden sheet1.iloc[:,i], um die i-te Spalte und sheet1.iloc[i,:]die i-te Zeile zu erhalten.

Dr. Manhattan
quelle
13

Ich denke, das sollte Ihr Bedürfnis befriedigen:

import pandas as pd

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

Sie müssen nur den Pfad zu Ihrer Datei eingeben pd.read_excel

import pandas as pd

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

Überprüfen Sie die Dokumentation , um Parameter skiprowszu untersuchen, die Zeilen beim Laden des Excel ignorieren

ted
quelle
0
import pandas as pd

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

print (data)
Suthura Sudharaka
quelle
0

Hier ist eine aktualisierte Methode mit Syntax, die im Python-Code häufiger vorkommt. Es verhindert auch, dass Sie dieselbe Datei mehrmals öffnen.

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
quelle