Цикл для создания фреймов данных из двух списков - PullRequest
0 голосов
/ 01 апреля 2019

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

# master list of substrings to look for in filename
sub_list = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR']

# set path
path = 'C:/Users/my_user/Desktop/my_folder'

# get list of files with full path
files = glob.glob(os.path.join(path, '*.xlsx'))

# empty list for extracted substrings
df_names = []

Ниже показано, как я извлекаю подстроки из имени файла

for filename in files:
    if any(sub in filename for sub in sub_list):
        name = [sub_str for sub_str in sub_list if(sub_str in filename)]
        helper = '' # empty string to join with list element to convert to string
        name = helper.join(name) # convert list element to a string
        df_names.append(name)

Я перебираю список df_names для создания фреймов данных

for name in (df_names):
    exec('{} = pd.DataFrame()'.format(name))

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

Я попробовал следующее, но при этом перезаписываются все предыдущие имена и остается один кадр данных с именем name.

for name, file in zip(df_names, files):
    name = pd.read_excel(file)

1 Ответ

2 голосов
/ 01 апреля 2019

Рассматривали ли вы хранение своих данных в словаре, а не в списке?

Вместо:

for name, file in zip(df_names, files):
    name = pd.read_excel(file)

Вы можете использовать:

dfs = {}

for name, file in zip(df_names, files):
    dfs[name] = pd.read_excel(file)

Выможет затем получить фрейм данных для файла 'ABC' (при условии, что 'ABC' - это имя файла), например:

dfs['ABC']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...