我想从目录中加载多个具有不同结构的xlsx文件,并根据文件名分配这些自己的数据框。我有30多个文件具有不同的结构但为了简洁起见,请考虑以下内容:
3个excel文件[wild_animals.xlsx,farm_animals_xlsx,domestic_animals.xlsx]
我想为每个人分配他们自己的数据框,所以如果文件名包含' wild'它被分配给wild_df,如果是farm然后是farm_df,如果是国内则是dom_df。这只是一个过程的第一步,因为实际文件包含很多“噪音”。需要根据文件类型等进行清理,它们的文件名也会每周更改,只有几个关键标记保持不变。
我的假设是glob模块是开始这样做的最好方法,但是在获取文件扩展名的非常具体的部分并使用它来分配给特定的df我变得有点迷失,所以任何帮助赞赏。
我前一段时间问了一个类似的问题,但这是一个更广泛问题的一部分,我现在已经解决了大部分问题。
答案 0 :(得分:2)
我会将它们解析为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']
等
答案 1 :(得分:2)
你需要获取所有xlsx文件,而不是使用理解dict,你可以访问任何榆树
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}
答案 2 :(得分:1)
为了完整性想要展示我最终使用的解决方案,非常接近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}
...