Я попытаюсь сделать кадр данных с этими данными:
test1 test2 test3
test [test1, test2] [testbelongsto1, testbelongst2]
Что-то вроде этого:
test1 test2 test3
test test1 testbelongsto1
test test2 testbelongsto2
Я нашел ответ на этот вопрос https://stackoverflow.com/a/38652414 Выглядит именно то, что мне нужно, верно? Есть много вопросов, которые отвечают на мой вопрос ..
Однако, что бы я ни пытался, я застрял с этой ошибкой:
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'
с этой функцией (см. ссылку):
def explode(self, df, columns):
idx = np.repeat(df.index, df[columns[0]].str.len())
a = df.T.reindex_axis(columns).values
concat = np.concatenate([np.concatenate(a[i]) for i in range(a.shape[0])])
p = pd.DataFrame(concat.reshape(a.shape[0], -1).T, idx, columns)
return pd.concat([df.drop(columns, axis=1), p], axis=1).reset_index(drop=True)
Важная заметка! дата исходит из функции read_csv. Столбцы, которые мне нужно взорвать, представляют собой строки, поэтому я написал этот фрагмент кода, чтобы преобразовать их в списки:
df['users'] = df['users'].apply(literal_eval)
Все перепробовал с конвертацией из dtype в сохранение их в других форматах. Но ничего не решает проблему...
Пожалуйста помоги
ОБНОВЛЕНИЕ: Ниже показан «реальный» пример набора данных из нескольких строк: «test2» => «users» и «test3» => «interests», массивы имеют одинаковый размер.
{'index': [0, 1, 2, 3, 4], 'Unnamed: 0': [0, 1, 4, 5, 6], 'users': ['[1, 1, 28, 28, 68]', '[1, 1, 16]', '[32, 37, 66, 67, 54, 117]', '[31, 37, 66, 67, 100, 113, 117]', '[32, 37, 66, 67, 54, 117]'], 'interests': ['[set(), set(), set(), set(), set()]', '[set(), set(), set()]', '[set(), set(), set(), set(), {1535, 1542, 1527}, set()]', '[set(), set(), set(), set(), set(), set(), set()]', '[set(), set(), set(), set(), {1535, 1542, 1527}, set()]']}
ОБНОВЛЕНИЕ 2: Хорошо, это именно то, чего я хочу. Текущие данные, которые я получил сейчас:
`
index lift confidence interests users
0 {333, 333} 1
0 set() 22
0 set() 77
0 0 0.75 set() 88
4 set() 33
4 3 0.50 set() 44
`
Таким образом, кажется, что добавляется только последняя из каждой итерации. Это то, что я хочу:
`
index lift confidence interests users
0 88 0.33 344, 1
0 88 0.33 333 1
0 88 0.33 set() 22
0 88 0.33 set() 77
0 88 0.33 set() 88
4 38 0.50 set() 33
4 38 0.50 set() 44
`
Итак, я хочу, чтобы каждая строка данных (серия) повторялась для каждого пользователя, а также интересы каждого пользователя.
df.reset_index().head().to_dict('list')
, чтобы мы могли увидеть однозначное представление нескольких строк вашего DataFrame. Возможно, тогда мы сможем воспроизвести ошибку, которую вы видите. - person unutbu   schedule 22.07.2017