基于多列关键词筛选指定百分比范围的用户数据求助
筛选含特定百分比关键词的OnlyFans用户问题
我有一个形状为(31479, 8)的数据集,列名如下:
Index(['Tweet_ID', 'ID', 'Display_Name', 'User_Name', 'Id_URL', 'Description', 'Content', 'Description_links'], dtype='object')
核心需求:筛选出Display_Name、User_Name、Id_URL、Description、Content列中包含top {任意百分比} onlyfans关键词的用户,其中百分比需在0.01%到9%之间(例如top 0.01% onlyfans、top 1.1% onlyfans)。
我尝试了硬编码特定百分比的筛选代码,但结果混入了99%这类不符合要求的数据:
f1 = ((data['Display_Name'].str.contains("top 0.01%")) | (data['Display_Name'].str.contains("top 0.02%")) | (data['Display_Name'].str.contains("top 0.03%")) | (data['Display_Name'].str.contains("top 0.05%")) | (data['Display_Name'].str.contains("top 0.1%")) | (data['Display_Name'].str.contains("top 0.2%")) | (data['Display_Name'].str.contains("top 0.3%")) | (data['Display_Name'].str.contains("top 0.7%")) | (data['Display_Name'].str.contains("top 1%")) | (data['Display_Name'].str.contains("top 3%")) | (data['Display_Name'].str.contains("top 5%")) | (data['Description'].str.contains("top 0.01%")) | (data['Description'].str.contains("top 0.02%")) | (data['Description'].str.contains("top 0.03%")) | (data['Description'].str.contains("top 0.05%")) | (data['Content'].str.contains("top 0.01%")) | (data['Content'].str.contains("top 0.02%")) | (data['Content'].str.contains("top 0.03%")) | (data['Content'].str.contains("top 0.05%")))
问题分析
- 硬编码覆盖不全:仅指定了少数几个百分比值,无法匹配0.04%、2.5%等符合要求的数值
- 未匹配完整关键词:只检查了
top X%,没有限定后续的onlyfans,导致含top 99%的内容被误筛选 - 遗漏列:未对
User_Name和Id_URL列进行筛选
解决方案
使用正则表达式匹配完整的关键词格式,同时限定百分比范围,覆盖所有符合要求的情况:
import pandas as pd # 正则模式:匹配top 0.01%-9% onlyfans的所有合法格式 pattern = r'top (0\.(0[1-9]|[1-9]\d?)|[1-9](\.\d+)?)% onlyfans' # 检查指定5列是否存在匹配内容,忽略大小写、处理缺失值 mask = (data['Display_Name'].str.contains(pattern, case=False, na=False) | data['User_Name'].str.contains(pattern, case=False, na=False) | data['Id_URL'].str.contains(pattern, case=False, na=False) | data['Description'].str.contains(pattern, case=False, na=False) | data['Content'].str.contains(pattern, case=False, na=False)) # 获取筛选后的数据集 filtered_data = data[mask]
正则说明
0\.(0[1-9]|[1-9]\d?):匹配0.01到0.99之间的小数,例如0.01、0.1、0.99[1-9](\.\d+)?:匹配1到9之间的整数或小数,例如1、3.5、9.9case=False:支持不区分大小写的匹配(如Top 2% OnlyFans)na=False:将缺失值视为不匹配,避免报错
内容的提问来源于stack exchange,提问作者Lalit Joshi
相关产品推荐
相关产品推荐

