2016-12-27 10 views
2

Я хочу загрузить несколько файлов xlsx с различными структурами из каталога и назначить их собственный кадр данных на основе имени файла. У меня есть 30+ файлов с различными структурами, но для краткости пожалуйста, рассмотрите следующую:Прочтите несколько файлов .xlsx из каталога в отдельные кадры данных Pandas на основе имени файла

3 файлов Excel [wild_animals.xlsx, farm_animals_xlsx, domestic_animals.xlsx]

Я хочу, чтобы назначить каждый со своим собственным кадром данных, так что если имя файла содержит «wild», ему присваивается wild_df, если ферма then farm_df и если внутренний, то dom_df. Это всего лишь первый шаг процесса, поскольку фактические файлы содержат много «шума», которые необходимо очистить в зависимости от типа файла, и т. Д. Имена файлов также будут меняться еженедельно, при этом останется только несколько ключевых маркеров.

Мое предположение - это модуль glob - это лучший способ начать это, но с точки зрения принятия очень конкретных частей расширения файла и использования этого для назначения определенному df. Я становлюсь немного потерянным, поэтому любая помощь оценивается.

Я задал подобный вопрос некоторое время назад, но это было частью более широкого вопроса, большинство из которых я сейчас решил.

ответ

2

Я хотел бы разобрать их в словарь DataFrame'S:

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

Вы урожденная, чтобы получить все xlsx, то вы можете получить доступ к любому вязам

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} 
+0

Спасибо - это дает мне то, что я нужно с точки зрения словаря файлов, но если бы я хотел получить доступ и создать фрейм данных, называемый wild, из только файлов с именем «wild», как бы я это сделал по тому, что вы дали до сих пор? Еще раз спасибо за помощь. – GoodCat

0

Для полноты хотел показать решение, которое я закончил с использованием, очень близко к 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} 
...