Python и Excel - OpenPyXL

Я работаю с Excel, используя Python, и у меня есть несколько вопросов:

  1. Загрузка листа Excel в 2-мерный массив.
    В VBA я бы просто сделал:
dim arrData as Variant 
arrData = shtData.Range("A1:E2500") 

Я бы получил массив (от 1 до 2500, от 1 до 5), к которому я могу легко получить доступ, например, arrData (1,5) - ›строка 1 столбец 5

В Python мне удалось сделать следующее:

#declare list
excel_data=[]

#loop to load excel spreadsheet data into 2d Array   
#basically I am looping through every row and append it to list
for row in shtData.iter_rows(min_row=5, max_row=50,values_only =True):
    excel_data.append(row)
  1. Есть ли способ назначить строку в список, начиная с индекса 1, а не с 0?
    В VBA есть опция Option Base 1.
    https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/option-base-statement < br>

  2. Это самый быстрый способ работы с набором данных Excel?
    Я планирую затем перебрать, скажем, 2500 строк и 5 столбцов - ›12 500 ячеек.
    Честно говоря, с VBA это было очень эффективно (работа с массивом в памяти).

  3. Насколько я понимаю, функции OpenPyXL:

load_workbook       

# только создает ССЫЛКУ НА EXCEL WORKBOOK - он не открывает? или он загружен в память, но то, что на HD, на самом деле цело?

shtData = wkb.worksheets[0]                         

# снова только ссылка?

shtReport = wkb.create_sheet(title="ReportTable")       

# он добавляет лист, но добавляет его в Excel, который загружается в память, только после сохранения Excel на HD действительно перезаписывается?


person Hronic    schedule 10.01.2021    source источник


Ответы (1)


Вы можете использовать Pandas и создать фрейм данных (2D-таблицу) из электронной таблицы Excel.

import pandas as pd

df = pd.read_excel("data.xls")
print(df)
print("____________")
print(f'Average sales are: {df["Gross"].values.mean()}')
print(f'Net income for April: {df.at[3, "Net"]}')
print("____________")
df_no_header = pd.read_excel("data.xls",skiprows=1, header=None)
print(df_no_header)
print("____________")
print(f'Net income for April: {df_no_header.at[3, 2]}')

Вывод:

output

Фреймворк Pandas имеет множество методов, которые позволят вам получить доступ к строкам и столбцам и многое другое. Если задать skiprows = 1, header = None, строка заголовка будет пропущена. См. здесь.

person pakpe    schedule 10.01.2021
comment
Можно ли тогда этим манипулировать Excel? Или мне все еще нужен OpenPyXL? - person Hronic; 11.01.2021
comment
Вам вообще не нужен OpenPyXL. Это гораздо более мощная альтернатива. Если вы регулярно имеете дело с импортом больших объемов данных из Excel, освоитесь с Pandas. - person pakpe; 11.01.2021