如何用Pandas或正则定位含字母的DataFrame行?astype转float报错排查
定位Conversion列含字母的异常行
方法一:正则匹配字母直接筛选
利用Pandas的str.contains结合正则表达式,精准定位包含大小写字母的行:
# 筛选出Conversion列包含字母的异常行 invalid_rows = uomorig_df[uomorig_df['Conversion'].str.contains(r'[a-zA-Z]', na=False)] # 打印异常行详情 print(invalid_rows)
- 参数
na=False:排除NaN值干扰,只聚焦含字母的有效字符串行。
方法二:通过数值转换标记所有无效行
如果除了字母,还有特殊符号等其他非数值字符导致转换失败,用pd.to_numeric将无法转换的内容设为NaN,再筛选这些行:
import pandas as pd # 生成转换后的数值列,无法转换的内容设为NaN uomorig_df['Conversion_num'] = pd.to_numeric(uomorig_df['Conversion'], errors='coerce') # 筛选出所有转换失败的行 invalid_rows = uomorig_df[uomorig_df['Conversion_num'].isna()] print(invalid_rows)
这种方法能覆盖所有无法转成浮点型的异常情况,不止是字母。
进阶:提取具体的无效字母字符
如果需要明确每行里的字母内容,结合正则提取:
import re # 提取每行中的字母字符 uomorig_df['invalid_chars'] = uomorig_df['Conversion'].apply(lambda x: ''.join(re.findall(r'[a-zA-Z]', str(x)))) # 筛选出存在无效字母的行 invalid_rows = uomorig_df[uomorig_df['invalid_chars'] != ''] # 查看原内容和对应的无效字母 print(invalid_rows[['Conversion', 'invalid_chars']])
内容的提问来源于stack exchange,提问作者htank
相关产品推荐
相关产品推荐

