Динамический импорт листов EXCEL и назначение их для DataFrames в Python, используя панд - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть файл EXCEL с несколькими листами (гораздо больше, чем три, использованные в трех, использованных в этом примере).Я хотел бы динамически импортировать их по листам и назначать им суффиксы, чтобы различать их, поскольку они представляют собой одни и те же переменные, полученные в разное время.Я могу сделать это, используя следующий код:

import pandas as pd   

filename = 'test.xlsx'
xls   = pd.ExcelFile(filename)

df_1  = pd.read_excel(xls, '#1')
df_1  = df_1.add_suffix('_1')                                           
df_2  = pd.read_excel(xls, '#2')
df_2  = df_2.add_suffix('_2')                                          
df_3  = pd.read_excel(xls, '#3')
df_3  = df_3.add_suffix('_3')     

Однако, это становится немного утомительно, когда у меня есть большое количество переменных, назначенных для разных листов.Таким образом, я хотел бы посмотреть, есть ли способ динамически сделать это с помощью цикла for, посредством чего я бы также обновлял имя DataFrame для каждой итерации.

  • Есть ли способ сделать это?
  • Рекомендуется ли назначать переменные динамически?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я попробовал еще несколько питонических подходов к этому сценарию, который вы описали, используя понимание списка и понимание слова (вы можете выбрать тот, который вы хотите использовать).

df_dict = { 'df_' + str(c) : pd.read_excel(xls, i) for c, i in enumerate(xls.sheet_names, 1)}
df_list = [pd.read_excel(xls, i) for i in xls.sheet_names]

print(df_dict['df_1'])
print(df_list[0])

Как видно из тестов, оба будут выдавать один и тот же DataFrame.

В первом случае вы получите доступ к своим данным через числовой индекс (df_list[0], df_list[1] и т. Д.).

Во втором вы получите доступ через ключи, используя предложенные вами имена, например, с первым ключом df_dict['df_1'].

Другим подходом будет динамическое создание переменных, их присвоениена ваш global диктНапример, приведенный ниже код даст тот же результат, что и показанный выше:

for c, i in enumerate(xls.sheet_names, 1):
    globals()['df_' + str(c)] = pd.read_excel(xls, i) 

print(df_1)

Однако я не рекомендую использовать это, если это НЕ ДЕЙСТВИТЕЛЬНО обязательно, так как вы можете легко потерять отслеживание созданных переменныхв вашей программе.

0 голосов
/ 12 февраля 2019
import pandas as pd   

filename = 'test.xlsx'
xls   = pd.ExcelFile(filename)
c = 0
dfs = []
for i in xls.sheet_names: #xls.sheet_names contains list of all sheet names in excel.
    df = pd.read_excel(xls, i)
    df = df.add_suffix('_' + str(c))
    dfs.append(df) 
    c += 1

#dfs[0], dfs[1], ... contains all the dataframes of respective sheets 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...