gpt4 book ai didi

python - 将字符串中的单词替换为 pandas 数据框中的单词

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:21 24 4
gpt4 key购买 nike

我有一个字符串:

str = 'i have a banana and an apple'

我也有一个数据框

name    new_name
have had
bed eat
banana lime

如果 pandas df 中存在该单词,我想替换字符串中的单词。

例如(对于我的 str= 输出应该是。

'i had a lime and an apple'

我正在尝试定义一个函数

def replace(df,string):
L = []
for i in string:
new_word = df[[new_name]].loc[df.name==i].item()
if not new_word:
new_word = i
L.append(new_word)
result_str = ' '.join(map(str, L))
return result_str

但这看起来很长,有没有更好的方法(时间效率)来获得这样的输出?

最佳答案

选项 1

  1. 在自然分隔符(空格)上拆分字符串
  2. 调用pd.Series.replace,并将new_name作为参数传递
  3. 将系列中的单元格与 str.cat/str.join 合并

m = df.set_index('name').new_name

pd.Series(string.split()).replace(m).str.cat(sep=' ')
'i had a lime and an apple'

string 是您的原始字符串。不要使用 str 定义变量,那样会隐藏同名的内置类。

或者,调用 str.join 应该比 str.cat 更快 -

' '.join(pd.Series(string.split()).replace(m).tolist())
'i had a lime and an apple'

从现在开始,我将使用这种在 Series 中连接字符串的方法,您还将在即将到来的选项中看到它。


选项 2
您可以跳过 pandas,而是使用 re.sub:

import re

m = df.set_index('name').new_name.to_dict()
p = r'\b{}\b'.format('|'.join(df.name.tolist()))

re.sub(p, lambda x: m.get(x.group()), string)
'i had a lime and an apple'

性能

string = 'i have a banana and an apple ' * 10000

# Series-`replacement

%%timeit
m = df.set_index('name').new_name
' '.join(pd.Series(string.split()).replace(m).tolist())

100 loops, best of 3: 20.3 ms per loop

# `re`gex replacement

%%timeit
m = df.set_index('name').new_name.to_dict()
p = r'\b{}\b'.format('|'.join(df.name.tolist()))
re.sub(p, lambda x: m.get(x.group()), string)

10 loops, best of 3: 30.7 ms per loop

关于python - 将字符串中的单词替换为 pandas 数据框中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48382757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com