当前位置: 首页 > 知识库问答 >
问题:

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

茹航
2023-03-14

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

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

raw_text = {
    "text": ["Hello, world!", "Hello, how are you?", "This world is funny!"],
    "col2": [0,1,1]}

littletext = pd.DataFrame(raw_text, index = pd.Index(['A', 'B', 'C'], name='letter'), columns = pd.Index(['text', 'col2'], name='attributes'))


raw_dict = {
    "key": ["Hello", "This", "funny"],
    "replacewith": ["Hi", "That", "hilarious"]}

littledict = pd.DataFrame(raw_dict, index = pd.Index(['a','b','c'], name='letter'), columns = pd.Index(['key', 'replacewith'], name='attributes'))


print(littletext) # ignore 'col2' since it is irrelevant in this discussion

                   text  col2
A         Hello, world!     0
B   Hello, how are you?     1
C  This world is funny!     1

print(littledict)
     key replacewith
a  Hello          Hi
b   This        That
c  funny   hilarious

我希望按照下面的说明修改“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

以下是我尝试过的两种尝试,但都不起作用。他们没有产生错误,他们只是没有像我上面描述的那样修改“小文本”。尝试#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等,但没有结果。许多“教程”网站只涵盖单个文本示例,而不是像我展示的示例那样涵盖整列句子,因此在扩展到行业规模的项目时毫无用处。我希望有人能很好地阐明这一点,因为这种文本操作在许多行业环境中都很常见。

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

共有2个答案

孔瑾瑜
2023-03-14

你第一次尝试就很接近了。您可以使用索引中的键创建字典,并使用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
戴瑞
2023-03-14

用于生成正则表达式并使用正则表达式中的正则表达式。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
 类似资料:
  • 我需要一些帮助来替换HashMap中的值。HashMap包含每个键的多个值,这些值是从ArrayList中添加的。我想做的是替换键中的一个元素。例如,用户输入键1和索引2,这将是该键的值[1]=[A, B, C, D],索引2将是字母“C”,我想用“X”替换它,这样输出将是[1]=[A, B, X, D],这将在一个同时循环中。 输出: 1 张 AB 光盘 2 张 AB 光盘 3 张 AB 光盘

  • 我正在学习MapReduce,我想读取一个输入文件(逐句)并将每个句子写入一个输出文件,前提是它不包含单词“snake”。 例如。输入文件: 则输出文件应为: 为此,我在< code>map方法中检查句子(< code>value)是否包含单词snake。如果句子中不包含snake单词,那么我将在< code>context中书写该句子。 此外,我将化简器任务的数量设置为0,否则在输出文件中,我以

  • 问题内容: 我想替换包含特定子字符串的所有字符串。因此,例如,如果我有此数据框: 我可以用字符串“ ball sport”代替足球,如下所示: 我想,虽然是替换包含所有(在这种情况下和)与“球运动”。像这样: 问题答案: 您可以用来掩盖包含“ ball”的行,然后用新值覆盖: 要使其不区分大小写,请通过`case = False:

  • 问题内容: 看来应该很容易找出来,但我一直在努力寻找任何答案。 我希望能够对Oracle中的USER_VIEWS表进行查询,以查找使用特定表的其他视图。 就像是: SELECT view_name,来自user_views的文本,其中文本类似’%MY_TABLE%’ 我收到错误消息:ORA-00932:数据类型不一致:预期的NUMBER个很长 TEXT的数据类型为LONG,在TOAD中显示为WID

  • 问题内容: 我正在尝试从文本中提取所有包含指定单词的句子。 但它正在回报我: 代替 : 有什么帮助吗? 问题答案:

  • 大家好,我不需要答案,但我想知道并找出我做错了什么。作为一名初学者,我的学习任务非常“简单”。我需要创建一个字符串,在这个字符串中,我需要用其他单词替换一些单词,而不需要使用for循环:(我也想打印它,但我不知道该把Console.WriteLine放在哪里。谷歌搜索1小时不起作用,或者问了一个同事。 /*练习:与stringBuilder一起使用*猫变成小猫*狗变成小狗*老鼠变成小鼠*单词必须替