У меня есть столбец панд со списками значений различной длины, например:
idx lists
0 [1,3,4,5]
1 [2]
2 [3,5]
3 [2,3,5]
Я хотел бы преобразовать их в матричный формат, где каждое возможное значение представляет столбец, и каждая строка заполняет 1, если значение существует, и 0 в противном случае, например:
idx 1 2 3 4 5
0 1 0 1 1 1
1 0 1 0 0 0
2 0 0 1 0 1
3 0 1 1 0 1
Я думал, что термин для этого был одно горячее кодирование, но я пытался использовать метод pd.get_dummies, который утверждает, что он может делать горячее кодирование, но когда я пытаюсь передать ввод, как показано выше:
test_hot = pd.Series([[1,2,3],[3,4,5],[1,6]])
pd.get_dummies(test_hot)
Я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/reshape.py", line 899, in get_dummies
dtype=dtype)
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/core/reshape/reshape.py", line 906, in _get_dummies_1d
codes, levels = _factorize_from_iterable(Series(data))
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/core/arrays/categorical.py", line 2515, in _factorize_from_iterable
cat = Categorical(values, ordered=True)
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/core/arrays/categorical.py", line 347, in __init__
codes, categories = factorize(values, sort=False)
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/util/_decorators.py", line 178, in wrapper
return func(*args, **kwargs)
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/core/algorithms.py", line 630, in factorize
na_value=na_value)
File "/opt/anaconda3/lib/python3.7/site-packages/pandas/core/algorithms.py", line 476, in _factorize_array
na_value=na_value)
File "pandas/_libs/hashtable_class_helper.pxi", line 1601, in pandas._libs.hashtable.PyObjectHashTable.get_labels
TypeError: unhashable type: 'list'
Метод работает нормально, если я передаю один список значений, например:
[1,2,3,4,5]
Он покажет матрицу 5x5, но заполняет только одну строку цифрой 1. Я пытаюсь расширить это, чтобы можно было заполнить более 1 значения в строке путем подачи столбца списков.