在多列上迭代和应用正则表达式函数/str 计数

Posted

技术标签:

【中文标题】在多列上迭代和应用正则表达式函数/str 计数【英文标题】:Iterating and Applying Regex functions/str counts over multple columns 【发布时间】:2022-01-06 10:31:17 【问题描述】:

我是 python 新手,正在尝试改进这个测试 df。我能够应用正则表达式函数来查找单元格中的模式,然后向我提供单个列级别上有多少个 1 的计数。下面是将函数单独应用于列的原始和结果 df 的图像,以及各个列的代码。下面也是测试 df 的文本版本(图片中缺少一行以使其更容易共享/图像与测试 df 不匹配,但结果相似):

import pandas as pd
        
df = pd.DataFrame([["1 | | Had a Greeter welcome clients 1     | | Take measures to ensure a safe and organized distribution 1         | | Protected confidentiality of clients (on social media, pictures, in conversation, own congregation members receiving assistance, etc.)",
                    "1  | | Chairs for clients to sit in while waiting 1     | | Take measures to ensure a safe and organized distribution"],
                   ["1 | Financial literacy/budgeting 1 | | Monetary/Bill Support 1    | | Mental Health Services/Counseling",
                    "1| | Clothing Assistance 1  | | Healthcare 1    | | Mental Health Services/Counseling 1     | | Spiritual Support 1      | | Job Skills Training"]
                    ] , columns = ['CF1', 'CF2'])

pattern = re.compile(r'\d+') 
df['CF1test'] = df['CF1'].apply(lambda x: '_'.join(pattern.findall(x))).str.count(pattern) 
df['CF2test'] = df['CF2'].apply(lambda x: '_'.join(pattern.findall(x))).str.count(pattern)

这是我试图开发的一个循环示例,用于迭代并将相同的函数应用于多个列:

for column in df:
    df[column] = df.join([column](df.apply(lambda x: '_'.join(pattern.findall(x))).str.count(pattern), rsuffix = '_test'))

但是,我收到“TypeError:预期的字符串或类似字节的对象”,我迷路了。有没有更好的方法可用?任何建议都会很棒!

【问题讨论】:

请以文本的形式提供您的输入数据 嗨@mozay。循环的输入数据与第一张图像相同。我正在尝试遍历结构类似于 CF1 和 CF2 的多个列(即计算所有由 '|' 分隔的 1。 图片≠文字;)我不能使用图片(请阅读this) 我很抱歉! @Mozay 我将编辑问题以包含文本! @mozay 希望这会奏效!感谢您提供任何建议 【参考方案1】:

您可以stack 您的数据框并将extractall 与您的模式一起使用:

(df.stack().str.extractall('(\d+)')[0]
   #.astype(int)  # conversion to int is only required for other operations, like sum
   .groupby(level=[0,1]).count().unstack())

输出:

   CF1  CF2
0    3    2
1    3    5

注意。我在这里计算数字(“test123”中的任何数字“42”或“123”都将被计算在内),如果您只想限制为 1,您可以调整正则表达式,并且如果您愿意,您还可以执行其他操作,例如求和而不是计数

【讨论】:

这很好用!谢谢!!

以上是关于在多列上迭代和应用正则表达式函数/str 计数的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 只能是数字怎么写?

python正则表达式

Python基础----正则表达式爬虫应用,configparser模块和subprocess模块

python爬虫-Re正则表达式介绍和实际应用

python爬虫-Re正则表达式介绍和实际应用

php正则表达式应用