我大约有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)
答案 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)