将pandas列表转换为虚拟变量

时间:2017-04-24 19:49:49

标签: pandas

我有一个pandas dataFrame,其中包含我想要转换为虚拟变量的变量列表。基本上我想转换:

enter image description here

到此:

enter image description here

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

这是一个节省内存的解决方案,它将使用稀疏矩阵和Pandas.SparseSeries:

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