Разделите список фреймов данных на несколько фреймов данных

#python #pandas #list #dataframe #split

#питон #панды #Список #фрейм данных #расщеплять

Вопрос:

У меня есть список фреймов данных, созданных с помощью определяемой пользователем функции —

a = list(map(test, cat_feature_names))

где

cat_feature_names = ['Brand', 'Variety', 'Style', 'Country', 'Stars', 'Top Ten']

и функция заключается в следующем

 def test(col):  vc = df[col].value_counts().rename_axis('unique_values').reset_index(name='counts')  vc['feature'] = col  vc['frequency']=round((vc['counts']/(vc['counts'].sum())*100),2)  vc = vc[['feature','unique_values','counts','frequency']]  no_of_unique = len(vc)  return vc   

Теперь мне нужно разделить содержимое «a» на несколько фреймов данных, которые имеют отдельный размер и форму. Мне нужно делать это динамически. Все, что я могу сейчас сделать, это извлекать по одному кадру данных за раз, вот так

a[0]

Цикл for не будет работать, потому что в списке «a»может быть очень большое количество кадров данных.

Пожалуйста, помогите.

Ответ №1:

IIUC, вы разделяете df в нескольких кадрах данных, присваивая имя столбца в качестве параметра вашей функции сопоставления test .

Одним из решений может быть сохранение ваших фреймов данных в словаре, используя имя столбца в качестве ключа:

 df_dict = dict(zip(cat_feature_names, map(test, cat_feature_names)))  

Затем вы можете получить доступ к каждому кадру данных с помощью . df_dict[col_name]

Ответ №2:

После цикла for ваш список будет разбит на несколько фреймов данных. globals() будет использоваться для того, чтобы назвать его как df_0, df_1 и так далее..

 for i in range(len(your_list)):  globals()[f"df_{i}"] = your_list[i]