Python 将特定单词替换为用户词典,将其他单词替换为0
所以我有一个评论数据集,里面有这样的评论 这是最好的。我去年买的。仍在使用。没问题 直到现在。惊人的电池寿命。在黑暗或宽阔的地方都能很好地工作 日光。送给任何书籍爱好者的最佳礼物 (这是来自原始数据集,我已删除了所有标点符号,并在已处理的数据集中使用了所有小写字母) 我要做的是将一些单词替换为1(根据我的字典),将其他单词替换为0。 我的字典是Python 将特定单词替换为用户词典,将其他单词替换为0,python,python-3.x,pandas,dictionary,dataframe,Python,Python 3.x,Pandas,Dictionary,Dataframe,所以我有一个评论数据集,里面有这样的评论 这是最好的。我去年买的。仍在使用。没问题 直到现在。惊人的电池寿命。在黑暗或宽阔的地方都能很好地工作 日光。送给任何书籍爱好者的最佳礼物 (这是来自原始数据集,我已删除了所有标点符号,并在已处理的数据集中使用了所有小写字母) 我要做的是将一些单词替换为1(根据我的字典),将其他单词替换为0。 我的字典是 dict = {"amazing":"1","super":"1","good":"1","useful":"1","nice":"1","awesom
dict = {"amazing":"1","super":"1","good":"1","useful":"1","nice":"1","awesome":"1","quality":"1","resolution":"1","perfect":"1","revolutionary":"1","and":"1","good":"1","purchase":"1","product":"1","impression":"1","watch":"1","quality":"1","weight":"1","stopped":"1","i":"1","easy":"1","read":"1","best":"1","better":"1","bad":"1"}
我希望我的输出像:
0010000000000001000000000100000
我使用了以下代码:
df['newreviews'] = df['reviews'].map(dict).fillna("0")
这总是返回0作为输出。我不想要这个,所以我把1和0作为字符串,尽管如此,我还是得到了相同的结果。
有什么建议可以解决这个问题吗?您可以:
# clean the sentence
import re
sent = re.sub(r'\.','',sent)
# convert to list
sent = sent.lower().split()
# get values from dict using comprehension
new_sent = ''.join([str(1) if x in mydict else str(0) for x in sent])
print(new_sent)
'001100000000000000000000100000'
首先不要使用
dict
作为变量名,因为内置(python保留字),然后使用列表理解
和get
将不匹配的值替换为0
注意:
如果数据像date.mazing
-标点符号后不需要空格,而是用空格代替
备选方案:
df['newreviews'] = df['reviews'].apply(lambda x: ''.join(d.get(y, '0') for y in x.split()))
你可以自己做
df.replace(repl, regex=True, inplace=True)
其中,
df
是您的数据帧,repl
是您的字典。您不能将字符串拆分到任何位置,以使此映射生效,此外,您还应该使用dict
作为变量名,因为它屏蔽了python的内置dict
类型。@示例如何拆分字符串以使映射生效?发布df['reviews']
的可测试片段。您可能希望执行以下操作:df.reviews.str.split().apply(lambda review:''.join(d.get)(word,'0'))对于word in review))
假设您已经降低并删除了所有标点符号(并将dict
重命名为d
)。注意:OP声称已经降低并删除了标点符号,因此您可能做得太多:)。此外,您还缺少“惊人”
,因为标点周围没有空格-“。。。date.mazing…“
@AChampion-谢谢,解决方案应该是用空格代替点蚀。
df['newreviews'] = df['reviews'].apply(lambda x: ''.join(d.get(y, '0') for y in x.split()))
print (df)
reviews \
0 simply the best i bought this last year stil...
newreviews
0 0011000000000001000000000100000
df.replace(repl, regex=True, inplace=True)