【问题标题】:Create dataframes with names from a list使用列表中的名称创建数据框
【发布时间】:2021-07-09 00:10:37
【问题描述】:

我有很多标签的 excel 文件。我想连接所有这些,一次一个标签。

我在做:

mypath = "mypath"
files = os.listdir(mypath)
files = [os.path.join(mypath,f) for f in files if f[-4:]=='xlsx']

sheets = pandas.ExcelFile(files[0]).sheet_names

现在,假设我的选项卡是 alpha、beta、gamma 等,我想创建一个数据框 df_alpha、df_beta 等,它们是我目录中所有文件的 alpha 选项卡的联合。

通过做:

for sheet in sheets:
    df = pandas.DataFrame()
    for f in files:
        df = pandas.concat([df, pandas.read_excel(f, sheet_name=sheet)])

我可以得到我想要的,但当然我只有一个数据框,它是每个文件中最后一个选项卡的并集。如何更改代码,以便我有一个 dfs 列表,每个都命名为 df_alpha、df_beta 等?

【问题讨论】:

    标签: python excel pandas concatenation dictionary-comprehension


    【解决方案1】:

    如果您可以使用数据框字典,以下内容可能会有所帮助:

    df_dict = {}
    for sheet in sheets:
        df = pandas.DataFrame()
        for f in files:
            df = pandas.concat([df, pandas.read_excel(f, sheet_name=sheet)])
        df_dict[sheet] = df
    

    稍后您可以使用其键从字典中调用相关的df,例如df_dict['alpha'].

    更新:正如@ALollz 在 cmets 中所指出的,上面的 sn-p 效率低下,因为多个 concats 连接到同一个数据帧。所以更有效的方法是:

    df_dict = {}
    for sheet in sheets:
        df_dict[sheet] = pandas.concat(pandas.read_excel(f, sheet_name=sheet) for f in files)
    

    请注意,在这种情况下,可以不在 pandas.concat 内定义显式列表推导式(内部表达式成为生成器)。

    更新 2:也许使用 dict 理解更“pythonic”(使用更常见的 pd 而不是 pandas):

    df_dict = {
        sheet: pd.concat(pd.read_excel(f, sheet_name=sheet) for f in files)
        for sheet in sheets
    }
    

    这里的诀窍是使用上面的 sn-ps 来定义 key: value 和字典理解。

    【讨论】:

    • 是的,这是个好主意。我会试试的。
    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多