#python #python-3.x #list #openpyxl
#python #python-3.x #Список #openpyxl
Вопрос:
Я работаю с Excel, используя Python, и у меня есть пара вопросов:
- Загрузка листа 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, а не 0?
В VBA есть опция Option Base 1.
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/option-base-statement - Это самый быстрый способ работать с набором данных Excel?
Затем я планирую перебрать, скажем, 2500 строк и 5 столбцов -> 12’500 ячеек.
Честно говоря, с VBA было очень эффективно (работать с массивом в памяти). - Как я понимаю, функции 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.