У меня есть pandas dataFrame, который содержит список переменных, которые я хочу преобразовать в фиктивные переменные. В основном я хочу конвертировать:

enter image description here

К этому:

enter image description here

2
laila 24 Апр 2017 в 22:49

2 ответа

Лучший ответ
df = pd.DataFrame({0: [['hello', 'motto'], ['motto', 'mania']]})
print(df)

                0
0  [hello, motto]
1  [motto, mania]

Используйте str.join , а затем str.get_dummies

df[0].str.join('|').str.get_dummies()

   hello  mania  motto
0      1      0      1
1      0      1      1
5
piRSquared 24 Апр 2017 в 19:53

Вот решение для экономии памяти, в котором будут использоваться разреженные матрицы и Pandas.Sparse Series:

from sklearn.feature_extraction.text import CountVectorizer

vect = CountVectorizer()

X = vect.fit_transform(df.pop(0).str.join(' '))

for i, col in enumerate(vect.get_feature_names()):
    df[col] = pd.SparseSeries(X[:, i].toarray().ravel(), fill_value=0)

Результат:

In [81]: df
Out[81]:
   hello  mania  motto
0      1      0      1
1      0      1      1

In [82]: df.memory_usage()
Out[82]:
Index    80
hello     8   # notice memory usage: # of ones multiplied by 8 bytes (int64)
mania     8
motto    16
dtype: int64
2
MaxU 24 Апр 2017 в 20:32
43596570