gpt4 book ai didi

python - 根据python中的列表替换列中的几个值

转载 作者:行者123 更新时间:2023-12-01 07:09:12 28 4
gpt4 key购买 nike

这是 stackoverflow 上一个很好解释的主题:Replacing few values in a pandas dataframe column with another value

示例是:

BrandName Specialty
A H
B I
ABC J
D K
AB L

解决办法是:

df['BrandName'] = df['BrandName'].replace(['ABC', 'AB'], 'A')

问题是我的数据框有点不同,我连续有两个字符串:

BrandName Specialty
A H
B I
ABC B J
D K
AB L

所需的输出仍然是:

BrandName Specialty
A H
B I
A B J
D K
A L

我怎样才能实现这个目标?

最佳答案

使用regex=True进行子字符串替换:

df['BrandName'] = df['BrandName'].replace(['ABC', 'AB'], 'A', regex=True)
print (df)
BrandName Specialty
0 A H
1 B I
2 A B J
3 D K
4 A L

需要另一个解决方案,如果需要避免另一个子字符串中的替换值,例如 ABCD 不被替换,则需要正则表达式单词边界:

print (df)
BrandName Specialty
0 A ABCD H
1 B I
2 ABC B J
3 D K
4 AB L


L = [r"\b{}\b".format(x) for x in ['ABC', 'AB']]

df['BrandName1'] = df['BrandName'].replace(L, 'A', regex=True)
df['BrandName2'] = df['BrandName'].replace(['ABC', 'AB'], 'A', regex=True)
print (df)
BrandName Specialty BrandName1 BrandName2
0 A ABCD H A ABCD A AD
1 B I B B
2 ABC B J A B A B
3 D K D D
4 AB L A A

编辑(来自提问者):

要加快速度,您可以查看这里:Speed up millions of regex replacements in Python 3

最好的方法是 trie 方法:

def trie_regex_from_words(words):
trie = Trie()
for word in words:
trie.add(word)
return re.compile(r"\b" + trie.pattern() + r"\b", re.IGNORECASE)

union = trie_regex_from_words(strings)
df['BrandName'] = df['BrandName'].replace(union, 'A', regex=True)

关于python - 根据python中的列表替换列中的几个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58303305/

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