#python #python-3.x
#python #python-3.x
Вопрос:
Как я могу разобрать ‘Sheet1’ и ‘Sheet2’ из Excel в a list
? В настоящее время я использую xlrd
, как показано в приведенном ниже коде.
Лист1:
Лист2:
Мой код:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
from __future__ import print_function
import xlrd
import sys
loc = 'excel.xlsx'
wb = xlrd.open_workbook(loc, encoding_override="iso-8859-5, cyrillic")
wb_name = wb.sheet_names()
count = len(wb_name)
data = []
column_excel =('Name', 'Course', 'Cost', 'level')
count_column = len(column_excel)
for i in range(count):
ow = xlrd.open_workbook('excel.xlsx').sheet_by_index(i)
for x in range (0, 100):
for i in range(2):
try:
if ow.cell_value(0, x) == column_excel[i]:
ips = ow.col_values(x, 1)
data.append(ips)
break
except IndexError:
continue
print(data)
Мои результаты:
[['Andre'], [1], [200], [5],
['Sam'], [2], [100], [8],
[7], ['Antony'], [4], [150],
[9], ['Ben'], [3], [500]]
Ожидаемый результат:
[['Andre'], [1], [200], [5],
['Sam'], [2], [100], [8],
['Antony'], [4], [7], [150],
['Ben'], [3], [9], [500]]
Ответ №1:
Если вы хотите использовать pandas
для чтения XLSX-файла, а не xlrd
, все становится намного проще с точки зрения кодирования. Кроме того, поскольку .append()
функция довольно умна в своем дизайне, столбцы автоматически выравниваются (при условии, что имя столбца совпадает), что может быть полезно, поскольку листы имеют разный порядок столбцов.
Официальные read_excel
документы pandas можно найти здесь.
Пример кода:
при вызове .read_excel()
using multiple sheets dict
возвращается DataFrames ( df_
) . Вторая строка кода используется для объединения фреймов данных.
import pandas as pd
df_ = pd.read_excel('courses.xlsx', sheet_name=['Sheet1', 'Sheet2'])
df = pd.DataFrame().append([df_[i] for i in df_]).reset_index(drop=True)
Вывод (в виде фрейма данных):
Name Course Cost level
0 Andre 1 200 5
1 Sam 2 100 8
2 Anthony 4 150 7
3 Ben 3 500 9
Вывод (в виде списка):
>>> df.to_numpy().tolist()
[['Andre', 1, 200, 5],
['Sam', 2, 100, 8],
['Anthony', 4, 150, 7],
['Ben', 3, 500, 9]]
Подтверждение:
Вывод этого списка не идентичен (по формату) ожидаемому результату в вопросе. Я предполагаю, что это недостаток дизайна, так как на выходе этого ответа отображается список записей, а не список отдельных полей, которыми позже может стать трудно управлять.
Комментарии:
1. Дополнительная информация: Если вы используете несколько файлов Excel, вы можете считывать их в цикле и добавлять результирующий фрейм данных в список. Этот список вы можете позже объединить в большой фрейм данных с помощью
big_df = pd.concat(list_variable)
2. @Dustin — Да, абсолютно верно, спасибо за дополнительную информацию.