#python #pandas #dataframe #loops #import
#python #pandas #фрейм данных #петли #импорт #циклы
Вопрос:
Я хочу импортировать несколько файлов с помощью pandas и присвоить им определенное имя, я могу сделать это следующим образом:
Data1 = pd.read_excel('Data1.xlsx')
Data2 = pd.read_excel('Data2.xlsx')
Но для создания имен переменных 100 файлов требуется время.
Моя цель — использовать список и выполнять те же действия с помощью цикла:
List = ['Data1', 'Data2, ...,'Data100]
Сначала я попробовал это:
Data1 = pd.read_excel(List[0] '.xlsx')
который работал нормально.
Я попробовал цикл для имен:
for name in List:
List[name] = pd.read_excel(List[0] '.xlsx')
Это не работает, я думаю, из-за моего определения имени.
Что я могу сделать, чтобы создать имена в соответствии со списком, пожалуйста?
Комментарии:
1. Не создавайте 100 отдельных фреймов данных. Создайте один список или диктант из 100 фреймов данных с помощью понятностей:
df_dict = {name:pd.read_excel(name '.xlsx') for name in List}
. Легко вызывать и использовать dfs внутри контейнера:df_dict['Data1']
,df_dict['Data2']
, …2. Звучит интересно. Я попробую. Спасибо.
3. Я попробовал немного обойти ваш совет. Отлично сработало. Большое спасибо. У меня все еще есть небольшая проблема, заключающаяся в том, что весь отзыв «df_dict[‘Data1’]» довольно длинный для каждого имени. Я хотел бы дать им короткое имя каждому, например data1 и data2, чтобы лучше использовать их позже. Если у меня есть список, например «[data1, data2 ..] Я не могу назначить фреймы данных этим коротким именам?, В противном случае мне нужно сделать data1 = df_dict[‘Data1’] и т.д. Для каждого фрейма данных, верно?
4. Я создал словарь: dictionary = dict(zip(name_list, name_list)); затем цикл, и он работал нормально: i = 0, пока i < x: vars()[dictionary[name_liste[i]] = df_dict[name_list[i]] i = 1 Думаю, это полностьюнеэффективно, но я работаю окончательно … все еще любопытно, как сделать это более элегантным
5. Вы могли бы выполнить
zip
в понимании:df_dict = {n:pd.read_excel(f '.xlsx') for n, f in zip(name_list, file_list)}
. Дажеenumerate
:df_dict = {'data' str(i 1):pd.read_excel(fname '.xlsx') for i, fname in enumerate(file_list)}
Ответ №1:
Я не совсем уверен, что вы хотите сделать.
Если вы спрашиваете, как создать переменные в программе для каждого из значений в вашем списке, это невозможно.
Я не знаю, что такое ваши данные или что вы пытаетесь с ними сделать. Однако, если вам нужно работать с файлами по одному, вы можете легко создать for
цикл, который выполняет все операции с одним файлом, а затем, когда этот файл завершен, переходит к следующему. Вы можете легко сделать это, изменив содержимое вашего списка так, чтобы оно соответствовало именам файлов, к которым вы хотите получить доступ.
Например:
import pandas as pd
list = ['File1', 'File2', 'File3', 'File4']
for name in list:
i = 0
Data = pd.read_excel(list[i] '.xlsx']
i = i 1
'Put whatever you want to do with the data here'
Итак, если у вас есть список с именами файлов, вы можете просто перепрофилировать свой цикл. Переменная i существует для получения текущего элемента списка — если цикл повторил код один раз, я получу имя файла в позиции индекса 1. Просто поместите все, что вы хотите сделать, в файл, в который я поместил комментарий.
Комментарии:
1. Мне нужны данные вашего кода «Data = pd.read_excel (list [i] ‘.xlsx’]» для изменения. Мне нужен «Data1, Data2 и т. Д.», Потому что позже я буду работать с каждым из данных независимо.