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?

Rakesh Adhikesavan
źródło

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)
DSM
źródło
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.

Murali Mopuru
źródło
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.

Dr Manhattan
źródło
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)
Ajay Sant
źródło
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

przetrząsać
źródło
0
import pandas as pd

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

print (data)
Suthura Sudharaka
źródło
0

Oto zaktualizowana metoda ze składnią, która jest bardziej powszechna w kodzie Pythona. Zapobiega również wielokrotnemu otwieraniu tego samego pliku.

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
źródło