Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 如何替换包含完整句子的列的每行中的多个单词?_Python_Pandas_String_Text_Replace - Fatal编程技术网

Python 如何替换包含完整句子的列的每行中的多个单词?

Python 如何替换包含完整句子的列的每行中的多个单词?,python,pandas,string,text,replace,Python,Pandas,String,Text,Replace,我有一个数据框(我们称之为“littletext”),它有一列,每行中都有句子。我还有另一个表(我们称之为“littledict”),我想用它作为参考,以查找和替换“littletext”每行中的单词和/或短语 这是我的两个数据帧。在本例中,我对它们进行了硬编码,但将在“真实生活”中将它们作为csv文件加载: 我希望按照下面的说明修改“littletext”,其中Python将查看“littletext”表(dataframe)每个句子中的多个单词,并替换多个单词,作用于所有行。最终结果应该是,

我有一个数据框(我们称之为“littletext”),它有一列,每行中都有句子。我还有另一个表(我们称之为“littledict”),我想用它作为参考,以查找和替换“littletext”每行中的单词和/或短语

这是我的两个数据帧。在本例中,我对它们进行了硬编码,但将在“真实生活”中将它们作为csv文件加载:

我希望按照下面的说明修改“littletext”,其中Python将查看“littletext”表(dataframe)每个句子中的多个单词,并替换多个单词,作用于所有行。最终结果应该是,A行和B行中的“Hello”被替换为“Hi”,C行中的“that”被替换为“This”,而“Funcy”被替换为“Hilary”:

                   text      col2
A         Hi, world!            0
B   Hi, how are you?            1
C  That world is hilarious!     1
这里有两次尝试,我都试过了,但都没有成功。它们没有生成错误,只是没有像我上面描述的那样修改“littletext”。尝试#1“从技术上讲”是有效的,但它效率低下,因此对于大规模的工作毫无用处,因为我必须预测和编程每一个可能的句子,以替换其他句子。尝试2根本不会改变任何事情

我的两次尝试都不起作用:

尝试#1:这没有帮助,因为要使用它,我必须对整个句子进行编程,以替换其他句子,这是毫无意义的:

littltext['text'].replace({'Hello, world!': 'Hi there, world.', 'This world is funny!': 'That world is hilarious'})
尝试#1返回:

Out[125]: 
0           Hi there, world.
1        Hello, how are you?
2    That world is hilarious
Name: text, dtype: object
尝试#2:此尝试更接近标记,但不返回任何更改:

for key in littledict:
    littletext = littletext.replace(key,littledict[key])
尝试#2次返回:

                   text  col2
0         Hello, world!     0
1   Hello, how are you?     1
2  This world is funny!     1
我搜索了互联网,包括Youtube、Udemy等,但没有结果。许多“教程”网站只涵盖单个文本示例,而不是像我展示的示例那样涵盖整列句子,因此在扩展到行业规模的项目时毫无用处。我希望有人能很好地阐明这一点,因为这种文本操作在许多行业环境中都很常见


我谦虚地感谢和感谢任何能帮助我的人

你与第一次尝试非常接近。您可以使用索引键从
littledict
创建字典,并使用regex=True

print (littletext['text']
          .replace(littledict.set_index('key')
                             ['replacewith'].to_dict(), 
                   regex=True)
      )
0                  Hi, world!
1            Hi, how are you?
2    That world is hilarious!
Name: text, dtype: object

dict
littledict
使您能够生成正则表达式并在
中使用正则表达式。replace.str()
替换您需要的字符,如下所示

s=dict(zip(littledict.key,littledict.replacewith))
littletext['text'].str.replace('|'.join(s), lambda x: s[x.group()])

0                  Hi, world!
1            Hi, how are you?
2    That world is hilarious!
Name: text, dtype: object

请提供预期的[最小、可复制的示例]()。您发布的代码无法运行;您未能显示结果。您的第二次尝试已接近尾声…感谢您的提醒;-)完成了,没有完成。您发布的代码仍然无法运行。除非你对输入有问题,否则它不应该出现在帖子中。硬编码您的DF和dict。对我的问题进行了调整。如果有人发现任何问题,请告诉我。再次感谢大家!非常感谢你!!谢谢你!您的解决方案也很有效。当我使用上面建议的代码并将littletext=放在两行中的第二行前面时,我得到了返回的数据帧,其中的值已更改!!很有魅力,非常感谢。只是帮我节省了工作时间。很高兴这帮了我
s=dict(zip(littledict.key,littledict.replacewith))
littletext['text'].str.replace('|'.join(s), lambda x: s[x.group()])

0                  Hi, world!
1            Hi, how are you?
2    That world is hilarious!
Name: text, dtype: object