根据文件名将多个.xlsx文件从一个目录读取到单独的Pandas数据框中

mfuanj7w  于 2022-12-09  发布在  其他
关注(0)|答案(3)|浏览(122)

我想从一个目录中加载多个具有不同结构的xlsx文件,并根据文件名为这些文件分配自己的数据框。我有30多个具有不同结构的文件,但为了简洁起见,请考虑以下几点:
3个excel文件[wild_animals.xlsx, farm_animals_xlsx, domestic_animals.xlsx]
我希望为每个文件分配各自的数据框,因此如果文件名包含“wild”,则将其分配为wild_df,如果是农场,则为farm_df,如果是家庭,则为dom_df。这只是流程的第一步,因为实际文件包含大量“噪音”这需要清理取决于文件类型等,他们的文件名也将改变每周的基础上,只有少数关键标记保持不变。
我的假设是glob模块是最好的方式开始这样做,但在采取非常具体的部分文件扩展名,并使用它来分配给一个特定的df我变得有点迷失,所以任何帮助感谢。
不久前我也问过类似的问题,但这是一个更广泛的问题的一部分,我现在已经解决了其中的大部分问题。

z9smfwbn

z9smfwbn1#

我会将它们解析到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']

等等。

nhn9ugyo

nhn9ugyo2#

你需要得到所有的xlsx文件,而不是使用理解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}
ijnw1ujt

ijnw1ujt3#

为了完整起见,我想展示一下我最终使用的解决方案,非常接近Khelili的建议,只是做了一些调整以适合我的特定代码,包括在此阶段不创建DataFrame

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}
...

相关问题