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

Posted

技术标签:

【中文标题】根据文件名将目录中的多个 .xlsx 文件读取到单独的 Pandas 数据框中【英文标题】:Read multiple .xlsx files from a directory into separate Pandas data frames based on file name 【发布时间】:2017-05-11 20:29:12 【问题描述】:

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

3个excel文件[wild_animals.xlsx、farm_animals_xlsx、domestic_animals.xlsx]

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

我的假设是 glob 模块是开始执行此操作的最佳方法,但就获取文件扩展名的非常特定部分并使用它分配给特定的 df 而言,我有点迷失了,所以任何帮助表示赞赏。

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

【问题讨论】:

【参考方案1】:

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

等等

【讨论】:

【参考方案2】:

你需要获取所有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

【讨论】:

谢谢 - 这给了我在文件字典方面需要的东西,但是如果我想访问并创建一个名为 wild 的数据框,仅从名为“wild”的文件中获取,我将如何处理这是你迄今为止给出的?再次感谢您的帮助。【参考方案3】:

为了完整起见,我想展示我最终使用的解决方案,非常接近 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
...

【讨论】:

以上是关于根据文件名将目录中的多个 .xlsx 文件读取到单独的 Pandas 数据框中的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 R 中的原始文件名将包含多个数据帧的大列表保存为单个 csv

bat批处理,根据清单中的文件名将多个文件移动到另外一个路径下,如何批量处理?非常感谢!

批处理文件根据文件名将文件复制到多个文件夹

使用SSIS表达式任务和文件系统任务,根据文件名将文件从一个文件夹移动到多个文件夹

Python使用pandas读取两个或者多个excel文件(xlsx)并进行数据连接(join)合并两个或者多个excel的信息

根据txt中的文件名将文件复制到目标文件夹中