根据文件nam将多个.xlsx文件从一个目录读入单独的Pandas数据帧

2024-09-30 14:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

3个excel文件[wild_动物.xlsx,家养动物_动物.xlsx]在

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

我的假设是glob模块是开始这项工作的最佳方式,但就获取文件扩展名的非常特定的部分并使用它来分配特定的df而言,我有点不知所措,所以任何帮助都是值得的。在

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


Tags: 文件数据目录df文件名过程xlsx结构
3条回答

我会把它们解析成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)

然后您可以将它们作为普通字典元素进行访问:

^{pr2}$

等等

您需要获取所有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}
...

相关问题 更多 >