У меня есть файл excel, который содержит более 30 листов. Однако операция, которую я выполняю на каждом листе, остается более или менее одинаковой. Но моя цель - создать отдельный фрейм данных для каждого листа, чтобы я мог ссылаться в будущем.
Это то, что я пробовал, но выдает ошибку
xls = pd.ExcelFile('DC_Measurement.xlsx')
sheets = xls.sheet_names
for s in sheets:
print(s)
'df '+ s = pd.read_excel(xls, sheet_name=s)
Итак, я хочу, чтобы было создано 30 фреймов данных, и каждый фрейм данных будет иметь имя листа в качестве имени суффикса. Я пробовал использовать оператор "+", но это тоже не помогло. Он выдал сообщение об ошибке, как показано ниже
SyntaxError: can't assign to operator
Как я могу создавать кадры данных на лету и называть их?
Возможный дубликат Как создать переменное количество переменных?






Вы можете использовать что-то вроде этого:
for s in sheets:
vars()['df'+ s] = pd.read_excel(xls, sheet_name=s)
Какое здесь будет имя фрейма данных? Он начинается с df, за которым следует имя листа, или просто имя листа? Потому что, когда я следую этому решению. Я не получаю имя кадра данных?
Имя будет начинаться с df, за которым следует имя листа. Например, если имя листа Sheet1 и Sheet2, имя dfs будет: dfSheet1 и dfSheet2 (это имя в квадратных скобках: df+s)
Или используйте locals:
for s in sheets:
locals()['df'+ s] = pd.read_excel(xls, sheet_name=s)
В функции измените locals на globals.
Наилучший подход обычно состоит в том, чтобы хранить фреймы данных в списке или словаре, где вы можете систематически работать с ними, например:
xls = pd.ExcelFile('DC_Measurement.xlsx')
sheets = {}
for s in xls.sheet_names:
print(s)
sheets[s] = pd.read_excel(xls, sheet_name=s)
Или только это:
xls = pd.ExcelFile('DC_Measurement.xlsx')
sheets = {
s: pd.read_excel(xls, sheet_name=s)
for s in xls.sheet_names
}
Это упростит программную работу с листами позже (просто нажмите sheets[s], где s — имя листа). В противном случае вы столкнетесь со сложной проблемой, как получить доступ ко всем фреймам данных, которые вы только что создали, как к свободно плавающим переменным.
Строго говоря, это не ответ на ваш вопрос, но это создаст словарь, где ключом является имя листа, а значением является фрейм данных.
workbook = pd.read_excel('DC_Measurement.xlsx', sheet_name = None)
Затем вы можете получить нужный фреймворк данных.
df = workbook['sheet_name']
Я думаю, что это более аккуратно, чем другие решения.
Вы можете создать словарь с ключом как
df_{}.format(s)и val какpd.read_excel(xls, sheet_name=s)