【发布时间】:2018-06-21 22:19:48
【问题描述】:
假设我有一个数据框和单词列表,即
toxic = ['bad','horrible','disguisting']
df = pd.DataFrame({'text':['You look horrible','You are good','you are bad and disguisting']})
main = pd.concat([df,pd.DataFrame(columns=toxic)]).fillna(0)
samp = main['text'].str.split().apply(lambda x : [i for i in toxic if i in x])
for i,j in enumerate(samp):
for k in j:
main.loc[i,k] = 1
这导致:
bad disguisting horrible text
0 0 0 1 You look horrible
1 0 0 0 You are good
2 1 1 0 you are bad and disguisting
这比 get_dummies 快一点,但是当数据量很大时,pandas 中的 for 循环并不明显。
我尝试过使用str.get_dummies,这宁愿对系列中的每个单词进行热编码,这会使其速度变慢。
pd.concat([df,main['text'].str.get_dummies(' ')[toxic]],1)
text bad horrible disguisting
0 You look horrible 0 1 0
1 You are good 0 0 0
2 you are bad and disguisting 1 0 1
如果我在 scipy 中尝试同样的方法。
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(toxic)
main['text'].str.split().apply(le.transform)
这导致Value Error,y contains new labels。有没有办法忽略 scipy 中的错误?
如何提高实现相同目标的速度,还有其他快速的方法吗?
【问题讨论】:
标签: python pandas scipy one-hot-encoding