Конкатенация файлов Excel, использование имени файла в качестве индекса, выдающего ошибку - PullRequest
0 голосов
/ 17 сентября 2018

У меня около 20 файлов XLSX в диапазоне от 4 до 10 МБ.

Я хочу взять определенный лист в этих файлах xlsx и объединить их в один файл.

Каждый файл xlsx назван в последовательном порядке по неделям, а на листе, который я пытаюсь проанализировать, нет даты, поэтому я использую имя_файла в качестве индекса и проведу обратный инжиниринг по дате недели.

Я использую следующий код, который я использую довольно часто для объединения нескольких файлов в один файл. Я также использую basename для добавления имени, но получаю следующую ошибку.

ValueError: Length mismatch: Expected axis has 461 elements, new values have 457 elements


import pandas as pd
from os.path import basename
import os
import glob
path = os.getcwd()
allFiles = glob.glob(path + "/*.xlsx")

    frame = pd.DataFrame()
    master_list = []

for file_ in allFiles:
    df = pd.read_excel(file_,sheet_name = "Base data",index_col=None, 
    header=0)
    df.index = [os.path.basename(f)] * len(data)
    master_list.append(df)

    frame = pd.concat(master_list)

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать понимание списка для списка DataFrames, а затем создать список имен файлов, используемых для параметра keys в concat:

dfs = [pd.read_excel(f, sheet_name="Base data",index_col=None,header=0) for f in allFiles]

keys = [os.path.basename(f) for f in allFiles]
frame = pd.concat(dfs, keys=keys)
#if want remove default index values
#frame = pd.concat(dfs, keys=keys).reset_index(level=1, drop=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...