Python 根据文件名将多个.xlsx文件从目录读入单独的数据帧

Python 根据文件名将多个.xlsx文件从目录读入单独的数据帧,python,excel,python-2.7,pandas,glob,Python,Excel,Python 2.7,Pandas,Glob,我想从一个目录中加载多个具有不同结构的xlsx文件,并根据文件名为它们分配自己的数据帧。我有30个不同结构的文件,但为了简洁起见,请考虑以下内容: 3个excel文件[野生动物.xlsx、农场动物.xlsx、家养动物.xlsx] 我想为每个文件分配各自的数据帧,因此,如果文件名包含“wild”,则将其分配给wild_df,如果是farm,则分配给farm_df,如果是Home,则分配给dom_df。这只是过程中的第一步,因为实际文件包含大量“噪音”,需要根据文件类型等进行清理。文件名也会每周更改

我想从一个目录中加载多个具有不同结构的xlsx文件,并根据文件名为它们分配自己的数据帧。我有30个不同结构的文件,但为了简洁起见,请考虑以下内容:

3个excel文件[野生动物.xlsx、农场动物.xlsx、家养动物.xlsx]

我想为每个文件分配各自的数据帧,因此,如果文件名包含“wild”,则将其分配给wild_df,如果是farm,则分配给farm_df,如果是Home,则分配给dom_df。这只是过程中的第一步,因为实际文件包含大量“噪音”,需要根据文件类型等进行清理。文件名也会每周更改,只有几个关键标记保持不变

我的假设是glob模块是开始这样做的最佳方式,但是在获取文件扩展名的非常特定部分并使用它来分配特定的df方面,我变得有点不知所措,因此非常感谢您的帮助


不久前我问了一个类似的问题,但这是一个更广泛问题的一部分,我现在已经解决了大部分问题

我会将它们解析到DataFrame的字典中:

import os
import glob
import pandas as pd

files = glob.glob('/path/to/*.xlsx')
dfs = {}

for f in files:
    dfs[os.path.splitext(os.path.basename(f))[0]] = pd.read_excel(f)
然后,您可以将它们作为普通字典元素进行访问:

dfs['wild_animals']
dfs['domestic_animals']

等等。

您需要获取所有xlsx文件,而不是使用comprehension dict,您可以访问任何elm

import pandas as pd
import os
import glob

path = 'Your_path'
extension = 'xlsx'
os.chdir(path)
result = [i for i in glob.glob('*.{}'.format(extension))]

{elm:pd.ExcelFile(elm) for elm in result}

为了完整性,我想展示我最终使用的解决方案,非常接近于Khelili的建议,并进行了一些调整,以适合我的特定代码,包括在此阶段不创建数据帧

import os
import pandas as pd
import openpyxl as excel
import glob



#setting up path

path = 'data_inputs'
extension = 'xlsx'
os.chdir(path)
files = [i for i in glob.glob('*.{}'.format(extension))]

#Grouping files - brings multiple files of same type together in a list 

wild_groups = ([s for s in files if "wild" in s])
domestic_groups = ([s for s in files if "domestic" in s])

#Sets up a dictionary associated with the file groupings to be called in another module 
file_names = {"WILD":wild_groups, "DOMESTIC":domestic_groups}
...

谢谢-这为我提供了文件字典方面所需的内容,但是如果我只想从中名为“wild”的文件访问并创建名为wild的数据框,我将如何从您目前提供的内容着手?再次感谢你的帮助。