如何使用str.contains系列功能?

2024-04-20 01:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有信用卡收费数据,其中有一列包含收费说明。我还创建了一个包含不同费用类别的词典。例如,我有一个名为杂货费(value)和正则表达式(Ralphs,Target)的类别。我将我的值与分隔符|组合在一个字符串中。你知道吗

我正在使用Series.str.contains(pat,case=True,flags=0,na=nan,regex=True)函数来查看每个索引中的字符串是否包含我的正则表达式。你知道吗

# libraries needed
# import pandas as pd
# import re

joined_string=['|'.join(value) for value in values]
the_list=joined_string

示例输出:the|u list=[煤气|互联网|水|电,冯斯|拉尔夫|凉亭|无食品|贸易商乔的|杂货店|食品4少|芽苗菜|市场@工作“]

df['Description']='FOOD4LESS 0508 0000FULLERTON           CA'

The Dataframe contains a column of different charges on your credit card
```python
for character_sequence in the_list:       
    boolean_output=df['Description'].str.contains(character_sequence,regex=True)

出于某种原因,代码没有遍历列表中的每个字符序列。它只通过一个字符序列,但我需要它通过多个字符序列。你知道吗


Tags: the字符串importtruestringvalue序列字符
1条回答
网友
1楼 · 发布于 2024-04-20 01:07:52

由于没有可比较的数据,所以我将只提供一些虚拟数据。你知道吗

import pandas as pd

names = ['Adam','Barry','Chuck','Dennis','Elon','Fridman','George','Harry']

df = pd.DataFrame(names, columns=['Names'])
# Apply regex and save to column: 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

用另一个类似于问题的例子来解决问题

首先,您的the_list变量不正确。假设这是一个拼写错误,我会在这里提出我的解决方案。请注意,regex或正则表达式,当应用于一列数据时,本质上意味着您试图找到一些模式。首先,您如何知道/检查您的模式识别工作是否正常?好吧,您至少需要几个数据点来验证regex结果。由于您只提供了一行数据,因此,我将在这里生成一些虚拟数据,并测试regex是否产生预期的结果。你知道吗

注意:请检查数据预处理部分以查看数据,以便您可以复制和测试解决方案。你知道吗

import pandas as pd
import re

# Make regex string from the list of target keywords
regex_expression = '|'.join(the_list)
# Make dataframe from the list of descriptions 
#    > see under Data section of the solution.
df = pd.DataFrame(descriptions, columns=['Description'])
# Regex search results for a subset of 
# target keywords: "Gas|Internet|Water|Electricity,VONS"
df['Regex_A'] = df.Description.str.contains("Gas|Internet|Water|Electricity,VONS", regex=True)
# Regex search result of all target keywords
df['Regex_B'] = df.Description.str.contains(regex_expression, regex=True)
df

输出

    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

数据准备

在一个实际的场景中,我会假设,对于您在问题中提出的问题类型,您将有一个单词列表,您希望在dataframe列中查找该列表。你知道吗

因此,我冒昧地首先将您的字符串转换为字符串列表。你知道吗

the_list="[Gas|Internet|Water|Electricity,VONS|RALPHS|Ralphs|PAVILIONS|FOOD4LESS|TRADER JOE'S|GROCERY OUTLET|FOOD 4 LESS|SPROUTS|MARKET@WORK]"
the_list = the_list.replace("[","").replace("]","").split("|")
the_list

输出

['Gas',
 'Internet',
 'Water',
 'Electricity,VONS',
 'RALPHS',
 'Ralphs',
 'PAVILIONS',
 'FOOD4LESS',
 "TRADER JOE'S",
 'GROCERY OUTLET',
 'FOOD 4 LESS',
 'SPROUTS',
 'MARKET@WORK']

此外,我们在有关键字的地方创建了五行数据;然后在其中添加另一行,作为regex模式搜索的结果。你知道吗

descriptions = [
                'FOOD4LESS 0508 0000FULLERTON           CA', 
                'Electricity,VONS 0777 0123FULLERTON           NY', 
                'PAVILIONS 1248 9800Ralphs           MA', 
                'SPROUTS 9823 0770MARKET@WORK           WI', 
                'Internet 0333 1008Water           NJ', 
                'Enternet 0444 1008Wager           NJ', 
]

相关问题 更多 >