根据文件名,将目录中的多个.xlsx文件读入单独的Pan​​das数据帧

时间:2016-12-27 14:35:02

标签: python excel python-2.7 pandas glob

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

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

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

我的假设是glob模块是开始这样做的最好方法,但是在获取文件扩展名的非常具体的部分并使用它来分配给特定的df我变得有点迷失,所以任何帮助赞赏。

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

3 个答案:

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