在下面的示例代码中,我希望"description"列包含从drop_transactionsTrue的任何字符串的任何行在我的结果掩码中.据我所知,我的数据帧中的两行都应该返回为True,但它们不是.

import pandas as pd

drop_transactions = ['CRCARDPMT', 'ONLINE PMT SMART',
                         '$TRANSFER DUMB BANK']
d = pd.DataFrame(
    data={'description':
          ['ONLINE PMT SMART ID94991 Internet Initiated Transaction-',
           '$TRANSFER DUMB BANK ID321 Internet Initiated Transaction-']}) 
drop_mask = d['description'].str.contains('|'.join(drop_transactions))

drop_mask
0     True
1    False  # I want this string to also be True
Name: description, dtype: bool

怀疑美元符号是罪魁祸首,如果我在适当的位置添加美元符号,第一行也会返回False:

drop_transactions = ['CRCARDPMT', '$ONLINE PMT SMART',  # Note added dollar
                         '$TRANSFER DUMB BANK']
d = pd.DataFrame(
    data={'description':
          ['$ONLINE PMT SMART ID94991 Internet Initiated Transaction-',  # Note added dollar
           '$TRANSFER DUMB BANK ID321 Internet Initiated Transaction-']})
drop_mask = d['description'].str.contains('|'.join(drop_transactions))
drop_mask 
0    False
1    False
Name: description, dtype: bool

我不太精通正则表达式,但有谁能帮我理解这里发生了什么?我知道我可以将匹配字符串更改为不查找美元符号,但我想了解为什么会发生这种情况,以确保我不会遇到任何future 的错误.

推荐答案

可以使用re.escape转义特殊正则表达式字符$:

import re

drop_mask = d["description"].str.contains(
    "|".join(map(re.escape, drop_transactions))
)

print(drop_mask)

打印:

0    True
1    True
Name: description, dtype: bool

Python相关问答推荐

如何排除prefecture_related中查询集为空的实例?

Matplotlib中的字体权重

如何使用使用来自其他列的值的公式更新一个rabrame列?

Python—压缩叶 map html作为邮箱附件并通过sendgrid发送

提高算法效率的策略?

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

Python 3试图访问在线程调用中实例化的类的对象

Django更新视图未更新

将索引表转换为Numy数组

使用Django标签显示信息

极地数据帧:ROLING_SUM向前看

在伪子进程中模拟标准输出.打开

如何在Ubuntu上更新ChromeDriver二进制文件

在给定一组约束的情况下使用所有唯一组合创建数据帧

嘲弄直接导入的函数?

Django中带有ForeignKey的抽象模型无法按预期继承

从Pandas Dataframe导出Excel透视表

将Hangman游戏中的&替换为所有比赛的玩家猜测

解析类型的字符串表示形式以获取子项的类型