Питон: Как прочитать несколько листов Excel в список?

#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 — Да, абсолютно верно, спасибо за дополнительную информацию.