Импорт таблиц Excel в пандас - PullRequest
0 голосов
/ 10 января 2019

Я хотел бы импортировать таблицы Excel (созданные с помощью функции табулирования Excel 2007 и выше) из рабочей книги в отдельные кадры данных. Извиняюсь, если об этом уже спрашивали, но из моих поисков я не смог найти то, что хотел. Я знаю, что вы можете легко сделать это, используя функцию read_excel, однако для этого требуется указать имя листа или , возвращающее набор данных для каждого листа .

Вместо указания имени листа мне было интересно, есть ли способ указать имя таблицы или, что еще лучше, вернуть набор данных для каждой таблицы в книге.

Я знаю, что это можно сделать, комбинируя xlwings с пандами , но мне было интересно, было ли это встроено в какую-либо из функций панд (возможно, ExcelFile).

Примерно так: -

import pandas as pd
xls = pd.ExcelFile('excel_file_path.xls')
# to read all tables to a map
tables_to_df_map = {}
for table_name in xls.table_names:
    table_to_df_map[table_name] = xls.parse(table_name)

1 Ответ

0 голосов
/ 15 февраля 2019

Хотя не совсем то, что я делал после этого, я нашел способ получить имена таблиц с оговоркой, что они ограничены именем листа.

Вот выдержка из кода, который я сейчас использую:

import pandas as pd
import openpyxl as op
wb=op.load_workbook(file_location) 
ws=wb['Sheet_Name']
#Intialising a list that will contain the sheet range of the tables in excel
table_ranges=[]
#Importing table details from excel: Table_Name and Sheet_Range
for table in ws._tables:
    table_ranges.append([table.name,table.ref])
table_ranges= pd.DataFrame(table_ranges, columns= ['Table_Name','Sheet_Range'])
#Initliasing an empty list where the excel table will be imported into
#This will create a lists of lists where each Excel table will be a sub list
xl_tables=[]
#Extracting each excel table found in the file
for index, rw in table_ranges.iterrows():
    sht_range=ws[rw['Sheet_Range']]
    data_rows = []
    i=0
    j=0
    for row in sht_range:
        j+=1
        data_cols = []
        for cell in row:
            i+=1
            data_cols.append(cell.value)
            if (i == len(row)) & (j == 1):
            #This if creates a column titled 'Table_Name' where each row is\
            #the name of the current table being imported from excel
                data_cols.append('Table_Name')
            elif i == len(row):
                data_cols.append(rw['Table_Name'])
        data_rows.append(data_cols)
        i=0
    var_tables.append(data_rows)

#Creating an empty dataframe where all the tables will be appended into
df=pd.DataFrame(columns=['Table_Name',...#Define as needed])
#Appending each table extracted from excel into the dataframe
for tb in xl_tables:
    df = pd.DataFrame(tb[1:], columns = tb[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...