【问题标题】:Concatenate Excel files, use filename as an index throwing an error连接 Excel 文件,使用文件名作为索引引发错误
【发布时间】:2018-09-17 22:01:38
【问题描述】:

我有大约 20 个 4-10 mb 的 XLSX 文件。

我想在这些 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)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以对 DataFrames 列表使用列表推导,然后在 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)
    

    【讨论】:

    • 完美!花了一段时间在我的机器上运行(6gig i3 怪物,直到我通过试用期)!但这正是我所需要的。 pd.concat 中的第二个参数是索引的键?
    • @Datanovice - 确切地说,它创建 MultiIndex - 第一级是文件名,第二级是每个小 DataFrame 的 RangeIndexes。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多