Чтение файла Excel в Python с использованием панд


144

Я пытаюсь прочитать файл Excel следующим образом:

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

которая выдает ошибку, которая говорит о двух ожидаемых аргументах, я не знаю, что является вторым аргументом, а также что я пытаюсь достичь здесь, это преобразовать файл Excel в DataFrame. Я делаю это правильно? или есть ли другой способ сделать это с помощью панд?

Ответы:


223

Закрыть: сначала вы вызываете 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но, хотя он не нарушал код, он тоже не работал.
Эллиптика

8
Я обнаружил, что pip install xlrd необходим для того, чтобы это работало. Пакет xlrd не поставляется с пандами, поэтому, если вы не установили его для каких-либо других целей, вы получите исключение «ImportError: Нет модуля с именем xlrd». Во всяком случае, верно для панд 0.19.0 на Mac.
user5920660

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.