Pandas DataFrame如何识别除A-Z、0-9和空格外的不合规字符
解决方案
我们可以通过正则匹配筛选非合规字符,合规范围包含大小写英文字母、数字0-9和空格,其余字符均判定为不合规。
完整实现代码
import pandas as pd import re # 构造示例DataFrame data = [['Jo!hn Benjam^in', '10th Avenueś'], ['Nick', '15$th Cross Str&eet'], ['Juli@e', 'Hackinson ro))ad'],['Vinやあcent','Main Stree吨']] df = pd.DataFrame(data, columns = ['Name', 'Address']) # 方法1:提取每行每列的非合规字符(单行去重) def get_invalid_chars(s: str) -> list: invalid_list = re.findall(r'[^A-Za-z0-9\s]', s) return list(set(invalid_list)) if invalid_list else [] # 给原DataFrame新增列存储对应行的非合规字符 for col in df.columns: df[f'{col}_非合规字符'] = df[col].apply(get_invalid_chars) # 方法2:统计每列所有出现过的非合规字符(全局去重) col_invalid_summary = {} for col in df.columns: total_invalid = [] for content in df[col]: total_invalid.extend(re.findall(r'[^A-Za-z0-9\s]', content)) col_invalid_summary[col] = list(set(total_invalid)) # 方法3:定位非合规字符在字符串中的具体索引位置 def locate_invalid(s: str) -> list: locate_res = [] for idx, char in enumerate(s): if not re.fullmatch(r'[A-Za-z0-9\s]', char): locate_res.append(f"索引{idx}: {char}") return locate_res if locate_res else [] for col in df.columns: df[f'{col}_非合规字符位置'] = df[col].apply(locate_invalid)
结果说明
- 查看每行的非合规字符直接打印
df即可 - 查看每列全局的非合规字符直接打印
col_invalid_summary,示例输出如下:
{'Name': ['!', '^', '@', 'や', 'あ'], 'Address': ['ś', '$', '&', ')', '吨']}
内容的提问来源于stack exchange,提问作者Osceria
相关产品推荐
相关产品推荐

