Читання файлу Excel в python за допомогою панд


144

Я намагаюся прочитати файл excel таким чином:

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

яка видає помилку, яка говорить про два очікувані аргументи, я не знаю, що таке другий аргумент, а також те, що я намагаюся досягти тут, це перетворити файл Excel у DataFrame, чи я це роблю правильно? чи є якийсь інший спосіб зробити це за допомогою панд?

Відповіді:


222

Закрити: спочатку ви телефонуєте ExcelFile, але потім ви викликаєте .parseметод і передаєте йому ім'я аркуша.

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

Що ви робите, це викликати метод, який живе в самому класі, а не екземпляр, що нормально (хоча і не дуже ідіоматично), але якщо ви це робите, вам також потрібно буде передати назву аркуша:

>>> 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
коли я використовую "df = xl.parse (" Sheet1 "), він автоматично приймає значення першої комірки кожного стовпця як назви стовпців кадру даних, як я можу вказати власні назви стовпців?
Ракеш Адхікесаван

2
У пандах 15.0.2 parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")не працює і видає помилку module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")працює для мене
Ніл

Приємно. Це майже так само акуратно, як і той самий доступ до вкладки за допомогою openpyxl. Панда викликає openpyxl під кришкою?
Підерман

2
Як ви запобігаєте перетворенню першого ряду в заголовки? Я спробував використовувати параметр, headers=Noneале, хоча він не порушив код, він також не працював.
Elliptica

8
Я виявив, що для роботи цього потрібен pip install xlrd . Пакет xlrd не постачається з пандами, тому якщо ви не встановили його з іншою метою, ви отримаєте виняток "ImportError: Немає модуля з іменем xlrd". Правда, на пандах 0.19.0 на Mac, у будь-якому випадку.
користувач5920660

95

Це набагато простий і легкий спосіб.

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)

переглянути докладні відомості про документацію http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: sheetnameдля нових версій Pandas ключове слово застаріле, sheet_nameзамість цього використовуйте .


20

Думаю, що я повинен додати тут, що якщо ви хочете отримати доступ до рядків або стовпців, щоб пройти через них, ви зробите це:

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

Редагувати:

Методи icol(i)та irow(i)застарілі зараз. Ви можете використовувати sheet1.iloc[:,i]для отримання i-го кола та sheet1.iloc[i,:]i-го ряду.


13

Я думаю, що це повинно задовольнити ваші потреби:

import pandas as pd

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

0

Вам просто потрібно подати шлях до файлу pd.read_excel

import pandas as pd

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

Ознайомтеся з документацією, щоб вивчити параметри, як skiprowsігнорувати рядки під час завантаження excel



0

Ось оновлений метод із синтаксисом, який частіше зустрічається в коді python. Це також заважає вам відкривати один і той же файл кілька разів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.