Перебор списка имен фреймов данных

#python #pandas #dataframe #loops #formatting

#python #панды #фрейм данных #циклы #форматирование

Вопрос:

У меня есть список фреймов данных, каждый из которых создан на основе уникального веб-запроса;

 
bngimp = parse_forecast_data(get_json('419524'), None)
belimp = parse_forecast_data(get_json('419525'), None)
braimp = parse_forecast_data(get_json('419635'), None)
chilimp = parse_forecast_data(get_json('419526'), None)
chinimp = parse_forecast_data(get_json('419527'), None)
domimp = parse_forecast_data(get_json('419633'), None)
fraimp = parse_forecast_data(get_json('419636'), None)
greimp = parse_forecast_data(get_json('419528'), None)
ghaimp = parse_forecast_data(get_json('419638'), None)
indimp = parse_forecast_data(get_json('419530'), None)
indoimp = parse_forecast_data(get_json('419639'), None)
itaimp = parse_forecast_data(get_json('419533'), None)
japimp = parse_forecast_data(get_json('419534'), None)
kuwimp = parse_forecast_data(get_json('419640'), None)
litimp = parse_forecast_data(get_json('419641'), None)
meximp = parse_forecast_data(get_json('419537'), None)
  

Мне нужно отформатировать каждый фрейм данных таким же образом, как показано ниже;

 bngimp = bngimp[['From Date','Sales Volume']]
bngimp = bngimp.set_index('From Date')
bngimp.index = pd.to_datetime(bngimp.index)
bngimp = bngimp.groupby(by=[bngimp.index.year, bngimp.index.month]).sum()
bngimp.columns = ['bngimp']
  

Есть ли какой-либо способ, которым я мог бы перебирать имена фреймов данных без необходимости копировать и вставлять каждое имя фрейма данных в приведенный выше код?

Будет еще несколько фреймов данных, поэтому копирование и вставка занимают довольно много времени!

Любая помощь очень ценится;

Ответ №1:

Я предлагаю создать словарь для номеров карт по именам фреймов данных и создать словарь DataFrame вызываемых out :

 d = {'419524': 'bngimp', '419525': 'belimp', ...}

out = {}
for k, v in d.items():
    df = parse_forecast_data(get_json(k), None)
    df = df[['From Date','Sales Volume']]
    df = df.set_index('From Date')
    df.index = pd.to_datetime(df.index)
    df = df.groupby(by=[df.index.year, df.index.month]).sum()
    df.columns = [v]
    out[v] = df
  

затем для получения фрейма данных выберите по ключу:

 print (out['bngimp'])
  

Также, если вы хотите создать один большой фрейм данных, можно использовать:

 df = pd.concat(out, axis=1)