Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将特定单词替换为用户词典,将其他单词替换为0_Python_Python 3.x_Pandas_Dictionary_Dataframe - Fatal编程技术网

Python 将特定单词替换为用户词典,将其他单词替换为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

所以我有一个评论数据集,里面有这样的评论

这是最好的。我去年买的。仍在使用。没问题 直到现在。惊人的电池寿命。在黑暗或宽阔的地方都能很好地工作 日光。送给任何书籍爱好者的最佳礼物

(这是来自原始数据集,我已删除了所有标点符号,并在已处理的数据集中使用了所有小写字母)

我要做的是将一些单词替换为1(根据我的字典),将其他单词替换为0。 我的字典是

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)