Czytanie pliku Excela w Pythonie za pomocą pand


144

Próbuję odczytać plik Excela w ten sposób:

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

co powoduje wyświetlenie błędu informującego o oczekiwaniu dwóch argumentów. Nie wiem, jaki jest drugi argument, a także to, co próbuję tutaj osiągnąć, to przekonwertować plik Excela na ramkę danych. Czy robię to we właściwy sposób? czy jest inny sposób, aby to zrobić za pomocą pand?

Odpowiedzi:


222

Zamknij: najpierw wywołujesz ExcelFile, ale potem wywołujesz .parsemetodę i przekazujesz jej nazwę arkusza.

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

To, co robisz, to wywołanie metody, która żyje w samej klasie, a nie w instancji, co jest w porządku (chociaż niezbyt idiomatyczne), ale jeśli to robisz, musisz również przekazać nazwę arkusza:

>>> 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
kiedy używam „df = xl.parse („ Sheet1 ”)”, automatycznie przyjmuje wartość pierwszej komórki każdej kolumny jako nazwy kolumn ramki danych, jak określić własne nazwy kolumn?
Rakesh Adhikesavan

2
W pandach 15.0.2 parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")nie działa i generuje błąd module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")pracuje dla mnie
Neil

Miły. Jest to prawie tak samo zgrabne, jak uzyskiwanie tego samego dostępu do karty za pomocą openpyxl. Czy pandy wzywają openpyxl pod maską?
Pyderman

2
Jak zapobiec zamianie pierwszego wiersza na nagłówki? Próbowałem użyć parametru, headers=Noneale chociaż nie złamał kodu, to też nie zadziałał.
Elliptica

8
Odkryłem, że pip install xlrd jest potrzebny, aby to zadziałało. Pakiet xlrd nie jest dostarczany z pandami, więc jeśli nie zainstalowałeś go w innym celu, otrzymasz wyjątek „ImportError: No module o nazwie xlrd”. W każdym razie prawda od pand 0.19.0 na Macu.
user5920660

95

To bardzo prosty i łatwy sposób.

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)

sprawdź dokumentację pełne szczegóły http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: sheetnamesłowo kluczowe jest przestarzałe w nowszych wersjach Pand, użyj sheet_namezamiast tego.


20

Pomyślałem, że powinienem tutaj dodać, że jeśli chcesz uzyskać dostęp do wierszy lub kolumn w celu ich zapętlenia, wykonaj następujące czynności:

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

Edytować:

Metody icol(i)i irow(i)są teraz przestarzałe. Możesz użyć, sheet1.iloc[:,i]aby uzyskać i-tą kolumnę i sheet1.iloc[i,:]uzyskać i-ty wiersz.


13

Myślę, że to powinno zaspokoić twoją potrzebę:

import pandas as pd

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

0

Wystarczy podać ścieżkę do pliku pd.read_excel

import pandas as pd

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

Zapoznaj się z dokumentacją, aby poznać parametry, takie jak skiprowsignorowanie wierszy podczas ładowania programu Excel



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.