Python и Excel — OpenPyXL

#python #python-3.x #list #openpyxl

#python #python-3.x #Список #openpyxl

Вопрос:

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

  1. Загрузка листа Excel в 2d-массив.
    В 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
  2. Это самый быстрый способ работать с набором данных Excel?
    Затем я планирую перебрать, скажем, 2500 строк и 5 столбцов -> 12’500 ячеек.
    Честно говоря, с VBA было очень эффективно (работать с массивом в памяти).
  3. Как я понимаю, функции OpenPyXL:
 load_workbook       
 

# создает только ССЫЛКУ НА КНИГУ EXCEL — она не открывает ее? или он «загружен» в память, но то, что находится на HD, на самом деле не повреждено?

 shtData = wkb.worksheets[0]                         
 

#опять только ссылка?

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

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

Ответ №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]}')
 

Вывод:

вывод

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

Комментарии:

1. Возможно ли тогда манипулировать Excel с этим? Или мне все еще нужен OpenPyXL?

2. Вам вообще не нужен OpenPyXL. Это гораздо более мощная альтернатива. Если вы обычно имеете дело с импортом большого объема данных из Excel, освоитесь с Pandas.