Pandas Multiindex from array => TypeError: unhashable тип: 'dict'
Я пытаюсь создать фрейм данных из массива со следующей структурой:
df = [[{'date_time': Timestamp('2015-05-22 05:37:59'),
'name': 'Tom',
'value': '129'},
{'date_time': Timestamp('2015-05-22 05:37:59'),
'name': 'Kate',
'value': '0'},
{'date_time': Timestamp('2015-05-22 05:37:59'),
'name': 'GroupeId',
'value': '0'}, {...}, {...}, {...}],[another list of dictionaries like the first one],[and another one]]
Используя этот код:
def create_from_arr():
baby_array=pd.MultiIndex.from_tuples(df, names=['sessions', 'behaves'])
return baby_array
У меня есть следующая ошибка, которую я не мог понять:
TypeError: unhashable type: 'dict'
Мой желаемый результат выглядит так:
list
date_time name value
1 0 2015-05-22 05:37:59 Tom 129
1 2015-05-22 05:37:59 Kate 0
2 2015-05-22 05:37:59 GroupeId 0
2 3 2015-05-26 05:56:59 Hence 129
4 2015-05-26 05:56:59 Kate 0
5 2015-05-26 05:56:59 Julie 0
3 ...................... ...... ......
2 ответов:
Я все еще не уверен, что именно вы хотите сделать с Мультииндексом, но вот один из способов "сгладить" ваш словарь в многоуровневых массивах и правильно загрузить данные в фрейм данных:
Обновлено с помощью "list" и "index" как MultiIndex
In [100]: data = [[{'date_time': Timestamp('2015-05-22 05:37:59'), .....: 'name': 'Tom', .....: 'value': '129'}, .....: {'date_time': Timestamp('2015-05-22 05:37:59'), .....: 'name': 'Kate', .....: 'value': '0'}, .....: {'date_time': Timestamp('2015-05-22 05:37:59'), .....: 'name': 'GroupeId', .....: 'value': '0'}], [{'date_time': Timestamp('2015-05-22 05:37:59'), .....: 'name': 'Tom', .....: 'value': '129'}, .....: {'date_time': Timestamp('2015-05-22 05:37:59'), .....: 'name': 'Kate', .....: 'value': '0'}, .....: {'date_time': Timestamp('2015-05-22 05:37:59'), .....: 'name': 'GroupeId', .....: 'value': '0'}]] In [101]: df = pd.DataFrame(columns=['list', 'date_time', 'name', 'value']) In [102]: for idx, each in enumerate(data, 1): .....: temp = pd.DataFrame(each) .....: temp['list'] = idx # manually assign "list" index .....: df = df.append(temp, ignore_index=True) .....: In [103]: df = df.reset_index() In [104]: df.set_index(['list', 'index']) Out[104]: date_time name value list index 1 0 2015-05-22 05:37:59 Tom 129 1 2015-05-22 05:37:59 Kate 0 2 2015-05-22 05:37:59 GroupeId 0 2 3 2015-05-22 05:37:59 Tom 129 4 2015-05-22 05:37:59 Kate 0 5 2015-05-22 05:37:59 GroupeId 0
IIUC, пусть
d- это выписка из вашего массива:d = [[{'date_time': '2015-05-22 05:37:59', 'name': 'Tom', 'value': '129'}, {'date_time': '2015-05-22 05:37:59', 'name': 'Kate', 'value': '0'}]]Я бы извлек фрейм данных с помощью:
df = pd.DataFrame.from_dict(d[0])Который возвращает:
Надеюсь, это поможет.date_time name value 0 2015-05-22 05:37:59 Tom 129 1 2015-05-22 05:37:59 Kate 0
Comments