Категориальный столбец со значением списка в кадре данных - PullRequest
0 голосов
/ 15 мая 2018

У меня есть Dataframe для хранения различных типов столбцов, float / int / object .

Поскольку Dataset слишком велик, я ищу способы уменьшить объем памятиИспользование.

Я обнаружил, что "Categorical" может быть использовано для уменьшения использования памяти для столбцов типа "Object", и я применил это к ним.Но как только я, изменить столбец со значением списка, ошибка "TypeError: unhashable type: 'list'"

Вот мой фрейм данных

vs_df = pd.DataFrame({'plan_name': ['abc', 'def'], 'plan_id': [10001, 10002]})
vs_df['handled_plans_id'] = np.empty((len(vs_df), 0)).tolist()
vs_df.at[[0, 1], 'handled_plans_id'] = [[105,120], []]
vs_df.handled_plans_id = vs_df.handled_plans_id.astype('category') # Error here

print(vs_df)

     plan_id plan_name handled_plans_id
0    10001       abc       [105, 120]
1    10002       def               []

Ошибка:

TypeError: unhashable type: 'list'
File "pandas\_libs\hashtable_class_helper.pxi", line 1367, in pandas._libs.hashtable.PyObjectHashTable.get_labels

Любые методы, решающие это илиУменьшите размер этого столбца с помощью списка значений.Спасибо!

Обновление

Множество значений внутри столбца handled_plans_id различны.Хотелось бы увидеть какие-либо методы для уменьшения использования памяти в этом столбце.

1 Ответ

0 голосов
/ 15 мая 2018

Использование кортежей.

vs_df = pd.DataFrame({'plan_name': ['abc', 'def'], 'plan_id': [10001, 10002]})
vs_df['handled_plans_id'] = [()]*len(vs_df)
vs_df.at[[0, 1], 'handled_plans_id'] = [(105,120), ()]
vs_df.handled_plans_id = vs_df.handled_plans_id.astype('category')
print(vs_df)

   plan_id plan_name handled_plans_id
0    10001       abc       (105, 120)
1    10002       def               ()

Если кортежи будут известной максимальной длины, вы можете разбить их на столбцы. Категориальный должен помочь больше тогда, хотя нет, если у вас есть слишком много различных чисел. Категориальными данными обычно являются один из небольшого набора - перечисление , например, «сердце», «пики», «алмазы», ​​«булавы» и тому подобное. Если у вас слишком много разных значений, преобразование в категорию не очень поможет.


Если файл слишком велик для размещения в памяти, вы можете разделить его на части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...