#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]