Pandas. Как вызвать фрейм данных из списка фреймов данных? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть список фреймов данных:

all_df = ['df_0','df_1','df_2','df_3','df_4','df_5','df_6']

Как я могу вызвать их из этого списка, чтобы сделать что-то вроде этого:

for (df,names) in zip(all_df,names):
   df.to_csv('output/{}.csv'.format(names))

При ожидаемом выполнении я получаю ошибка 'str' object has no attribute 'to_csv', так как я передаю строку в 'to_csv'.

Как я могу сохранить несколько фреймов данных (или выполнить с ними другие действия) в for l oop?

Спасибо!

Не могли бы вы также дать представление о том, как создать «правильный» список фреймов данных из этого:

path = 'inp/multysheet_excel_01.xlsx'
xl = pd.ExcelFile(path)
sh_name = xl.sheet_names

n = 0
for i in sh_name:
    exec('df_{} = pd.read_excel("{}", sheet_name="{}")'.format(n, path, i))
    n+=1

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

1 Ответ

2 голосов
/ 19 июня 2020

Вы довольно близки, но я вижу в этом некоторые ошибки для l oop. Скажем, у вас есть список фреймов данных dfs и соответствующие им имена в виде списка строк names, вы можете сохранить эти фреймы данных, используя имена как:

dfs = [df_1, df_2, df_3]
names = ['df_0','df_1','df_2']

for df,name in zip(dfs,names):
    df.to_csv('output\\{}.csv'.format(name))

Хотя, если бы у вас был только список имен, вы также можете сделать что-то вроде:

names = ['df_0','df_1','df_2']
for name in names:
    globals()[name].to_csv('output\\{}.csv'.format(name))
...