Python 如何使用series.str.contains函数浏览字符串列表?
我有信用卡费用数据,其中有一列包含费用说明。我还创建了一个包含不同费用类别的词典。例如,我有一个名为杂货费用(value)和正则表达式(Ralphs,Target)的类别。我将我的值与分隔符Python 如何使用series.str.contains函数浏览字符串列表?,python,regex,string,pandas,Python,Regex,String,Pandas,我有信用卡费用数据,其中有一列包含费用说明。我还创建了一个包含不同费用类别的词典。例如,我有一个名为杂货费用(value)和正则表达式(Ralphs,Target)的类别。我将我的值与分隔符|组合在一个字符串中 我正在使用Series.str.contains(pat,case=True,flags=0,na=nan,regex=True)函数查看每个索引中的字符串是否包含我的正则表达式 #需要库 #作为pd进口熊猫 #进口稀土 已联接的_字符串=['|'。将(值)联接为值中的值] \u列表=连
|
组合在一个字符串中
我正在使用Series.str.contains(pat,case=True,flags=0,na=nan,regex=True)
函数查看每个索引中的字符串是否包含我的正则表达式
#需要库
#作为pd进口熊猫
#进口稀土
已联接的_字符串=['|'。将(值)联接为值中的值]
\u列表=连接的\u字符串
示例输出:|u列表=[Gas | Internet | Water | Electric,VONS | RALPHS | RALPHS | PAVILIONS | FOOD4LESS | TRADER JOE'S |杂货店| FOOD 4 LESS |芽菜|MARKET@WORK“]
由于某些原因,代码没有遍历列表中的每个字符序列。它只遍历一个字符序列,但我需要它遍历多个字符序列。由于没有可比较的数据,我将只显示一些虚拟数据
将熊猫作为pd导入
姓名=[‘亚当’、‘巴里’、‘查克’、‘丹尼斯’、‘埃隆’、‘弗里德曼’、‘乔治’、‘哈利’]
df=pd.DataFrame(名称、列=['names'])
#应用regex并保存到列:regex
df['Regex']=df.Names.str.contains('[ae]',Regex=True)
df
输出:
Names Regex
0 Adam True
1 Barry True
2 Chuck False
3 Dennis True
4 Elon False
5 Fridman True
6 George True
7 Harry True
Description Regex_A Regex_B
0 FOOD4LESS 0508 0000FULLERTON CA False True
1 Electricity,VONS 0777 0123FULLERTON NY True True
2 PAVILIONS 1248 9800Ralphs MA False True
3 SPROUTS 9823 0770MARKET@WORK WI False True
4 Internet 0333 1008Water NJ True True
5 Enternet 0444 1008Wager NJ False False
['Gas',
'Internet',
'Water',
'Electricity,VONS',
'RALPHS',
'Ralphs',
'PAVILIONS',
'FOOD4LESS',
"TRADER JOE'S",
'GROCERY OUTLET',
'FOOD 4 LESS',
'SPROUTS',
'MARKET@WORK']
用另一个类似于问题的例子来解决问题
首先,您的列表
变量不正确。假设它是一个打字错误,我会在这里介绍我的解决方案。请注意,regex
或正则表达式,当应用于一列数据时,本质上意味着您正在尝试查找一些模式。首先,您如何知道/检查您的模式识别是否正常ng好吗?好的,您至少需要几个数据点来验证正则表达式的结果。由于您只提供了一行数据,因此,我将在这里生成一些虚拟数据,并测试regex
是否产生预期的结果
注意:请查看数据预筛选部分以查看数据,以便您可以复制和测试解决方案
将熊猫作为pd导入
进口稀土
#从目标关键字列表中生成正则表达式字符串
regex_表达式=“|”。join(_列表)
#从描述列表中创建dataframe
#-->请参阅解决方案的数据部分。
df=pd.DataFrame(描述,列=['Description'])
#一个子集的正则表达式搜索结果
#目标关键词:“天然气|互联网|水|电,VON”
df['Regex_A']=df.Description.str.contains(“气体|互联网|水|电,VONS”,Regex=True)
#所有目标关键字的正则表达式搜索结果
df['Regex_B']=df.Description.str.contains(Regex_表达式,Regex=True)
df
输出:
Names Regex
0 Adam True
1 Barry True
2 Chuck False
3 Dennis True
4 Elon False
5 Fridman True
6 George True
7 Harry True
Description Regex_A Regex_B
0 FOOD4LESS 0508 0000FULLERTON CA False True
1 Electricity,VONS 0777 0123FULLERTON NY True True
2 PAVILIONS 1248 9800Ralphs MA False True
3 SPROUTS 9823 0770MARKET@WORK WI False True
4 Internet 0333 1008Water NJ True True
5 Enternet 0444 1008Wager NJ False False
['Gas',
'Internet',
'Water',
'Electricity,VONS',
'RALPHS',
'Ralphs',
'PAVILIONS',
'FOOD4LESS',
"TRADER JOE'S",
'GROCERY OUTLET',
'FOOD 4 LESS',
'SPROUTS',
'MARKET@WORK']
数据准备
在一个实际的场景中,我会假设,对于您在问题中提出的问题类型,您将有一个要在dataframe列中查找的单词列表
因此,我冒昧地首先将您的字符串转换为字符串列表
the|u list=“[Gas | Internet | Water | Electric,VONS | RALPHS | RALPHS | PAVILIONS | Food4 LESS | TRADER JOE |杂货店| FOOD 4 LESS |芽菜|MARKET@WORK]"
_列表=_列表。替换(“[”,“”)。替换(“]”,“”)。拆分(“|”)
清单
输出:
Names Regex
0 Adam True
1 Barry True
2 Chuck False
3 Dennis True
4 Elon False
5 Fridman True
6 George True
7 Harry True
Description Regex_A Regex_B
0 FOOD4LESS 0508 0000FULLERTON CA False True
1 Electricity,VONS 0777 0123FULLERTON NY True True
2 PAVILIONS 1248 9800Ralphs MA False True
3 SPROUTS 9823 0770MARKET@WORK WI False True
4 Internet 0333 1008Water NJ True True
5 Enternet 0444 1008Wager NJ False False
['Gas',
'Internet',
'Water',
'Electricity,VONS',
'RALPHS',
'Ralphs',
'PAVILIONS',
'FOOD4LESS',
"TRADER JOE'S",
'GROCERY OUTLET',
'FOOD 4 LESS',
'SPROUTS',
'MARKET@WORK']
此外,我们在有我们要查找的关键字的地方创建了五行数据;然后在其中添加另一行,作为regex
模式搜索的结果,我们希望在其中出现False
说明=[
“无食品0508 000富勒顿加州”,
“纽约富勒顿电力公司0777 0123”,
“亭子1248 9800拉尔夫马”,
'芽98230770MARKET@WORKWI',
“互联网0333 1008Water NJ”,
“Enternet 0444 1008Wager NJ”,
]
是否可能是缩进错误?第二行是缩进到for下的,还是问题中的缩进方式?如果是这样,那就是你的问题!你能分享一些示例数据和相应的预期结果吗?不,我只是在堆栈溢出方面遇到了困难。@NickBosio你的列表实际上不是一个字符串。这里的分隔符是什么?它是“|”
?还是,您试图使用列表
变量的内容作为正则表达式字符串?请为df['Description']
@NickBosio再提供几行示例数据。请查看更新的解决方案(有一节描述了您在问题中提出的具体问题的解决方案)并让我知道这是否有帮助。