串联Excel文件,使用文件名作为引发错误的索引

时间:2018-09-17 13:56:00

标签: python pandas

我大约有20个XLSX文件,范围从4到10 mb。

我想在这些xlsx文件中抓取一张纸并将它们合并为一个文件。

每个xlsx文件都是按顺序的周顺序命名的,而我要解析的工作表没有日期,因此我将file_name用作索引,并将反向工程一个星期的日期。

我正在使用以下代码,我经常使用这些代码将多个文件合并为一个df。我还使用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 :(得分:2)

您可以对DataFrame列表使用列表理解,然后在concat中创建用于参数keys的文件名列表:

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)