2013-06-12 36 views
78

Próbuję odczytać Excel plik w ten sposób:Odczytywanie pliku programu Excel w Pythonie przy użyciu pandy

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

który zgłasza błąd, który mówi dwa argumenty z oczekiwaniami, nie wiem co drugi argument jest i również to, co próbuję osiągnąć, to przekonwertować plik Excel do DataFrame, czy robię to we właściwy sposób? czy jest jakiś inny sposób, aby to zrobić za pomocą pand?

Odpowiedz

136

Zamknij: najpierw zadzwoń pod numer ExcelFile, ale następnie wywołaj metodę .parse i przekaż 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 

Co robisz jest wywołanie metody, która mieszka na samej klasie, zamiast instancji, który jest w porządku (choć nie bardzo idiomatyczne), ale jeśli robisz, że trzeba także podać 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) 
+5

kiedy używać „df = xl.parse (” Arkusz1 „)” automatycznie przyjmuje wartość pierwszej komórki w każdej kolumnie jak nazwy kolumn w dataframe, w jaki sposób określić własne nazwy kolumn? –

+1

W pand 15.0.2, 'parsed = pd.io.parsers.ExcelFile.parse (xl," Arkusz1 ")' nie działa i zgłasza błąd 'obiekt modułu nie ma atrybutu ExcelFile'. 'parsed = pd.io.excel.ExcelFile.parse (xl," Sheet1 ")' działa dla mnie – Neil

+0

Nice. Jest to prawie tak samo wygodne, jak uzyskiwanie tego samego dostępu do karty za pomocą 'openpyxl'. Czy pandy nazywają openpyxl pod maską? – Pyderman

14

Myśl dodam tutaj, że jeśli chcesz mieć dostęp do wierszy lub kolumn do pętli przez nich, to zrobić:

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

Nice! Nie wiedziałem, że możesz uzyskać dostęp do kolumn lub wierszy – cd98

52

To znacznie 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) 

odjazdu dokumentacja pełne dane http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: The sheetname kluczowe jest przestarzała nowsze wersje Pandy używać sheet_name zamiast.

+1

Przedstawiciel, dołączając link do dokumentów. – hlyates

10

myślę, że to powinno zaspokoić potrzeby:

import pandas as pd 

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