如何在Pandas中识别并删除DataFrame内的虚假无效数据?
DataFrame虚假数据识别删除实现方法
首先基于你给出的示例场景,我们先定义通用的虚假数据判定规则,你可以根据实际业务需求调整阈值:
- 姓名列:长度过短、所有字符完全相同、无实际含义的全大写重复字母组合
- 地址列:全为数字、无意义连续随机字母(通过元音占比判断,正常英文地址元音字母占比通常不低于15%)、大小写混杂的无意义字符混合串、全为相同字符
完整实现代码
import pandas as pd import numpy as np data = {'Name' : ['Tom', 'AABBCC', 'Joseph', 'Krish', 'XXXX', 'John', 'U'], 'Address1': ['High Street', 'uwdfjfuf', '00000', 'Green Lane', 'Kingsway', 'Church Street', 'iwefwfn'], 'Address2': ['Park Avenue', 'The Crescent', 'ABCXYZ', 'Highfield Road', 'Stanley Road', 'New Street', '1ca2s597']} contact_details = pd.DataFrame(data) # 定义通用虚假字符串判断函数 def is_dummy_string(s, col_type='general'): s = str(s).strip() # 通用规则:全相同字符 if len(set(s)) == 1: return True # 通用规则:长度过短,可自行调整阈值 if len(s) < 3: return True # 姓名列专属规则 if col_type == 'name': # 全大写且无实际含义的重复字母组合 if s.isupper() and len(s) >=4: return True # 地址列专属规则 if col_type == 'address': # 全数字 if s.isdigit(): return True # 元音占比过低判定为无意义随机字符串 vowels = set('aeiouAEIOU') vowel_count = sum(1 for c in s if c in vowels) if vowel_count / len(s) < 0.15: return True # 字母数字随机穿插的无意义混合串 has_alpha = any(c.isalpha() for c in s) has_digit = any(c.isdigit() for c in s) if has_alpha and has_digit: return True return False # 对各列应用判定规则,任意一列存在虚假数据即删除该行 contact_details['is_dummy'] = contact_details.apply( lambda row: is_dummy_string(row['Name'], 'name') or is_dummy_string(row['Address1'], 'address') or is_dummy_string(row['Address2'], 'address'), axis=1 ) # 过滤掉虚假数据行 contact_details = contact_details[~contact_details['is_dummy']].drop('is_dummy', axis=1) print(contact_details)
运行输出结果
Name Address1 Address2 0 Tom High Street Park Avenue 3 Krish Green Lane Highfield Road 5 John Church Street New Street
规则调整说明
你可以根据自身数据集特征修改判定逻辑:
- 调整字符串长度阈值适配不同业务要求
- 增加自定义关键词过滤,比如常见的测试占位符test、dummy等
- 针对中文数据可以替换为拼音、常用词占比等判定逻辑
内容的提问来源于stack exchange,提问作者user01
相关产品推荐
相关产品推荐

