如何定位DataFrame中int类型转换失败的位置?
定位DataFrame中无法转换为整数的无效字符串位置
方法一:利用pd.to_numeric标记无效值
通过将无法转换为数字的项转为NaN,再筛选出这些NaN对应的原始内容和索引:
# 拆分并展开字符串,保留原DataFrame的行索引 temp_raw = thedataframe['next'].str.split(';').explode() # 尝试转换,无效项转为NaN temp_numeric = pd.to_numeric(temp_raw, errors='coerce') # 筛选出所有无法转换的原始字符串及其索引 invalid_items = temp_raw[temp_numeric.isna()] print("无效内容及对应原行索引:") print(invalid_items)
直接查看输出就能定位到导致失败的字符串(比如纯空格' '),以及它们来自原DataFrame的哪一行。
方法二:正则匹配筛选非数字项
如果目标是正整数,用正则表达式直接匹配不符合纯数字格式的项:
temp_raw = thedataframe['next'].str.split(';').explode() # 匹配非纯数字的项(若包含负整数,正则改为r'^-?\d+$') invalid_items = temp_raw[~temp_raw.str.match(r'^\d+$', na=False)] print("无效内容:") print(invalid_items) print("对应原行索引:") print(invalid_items.index.unique())
方法三:直接排查原列中的格式问题
错误提示的' '大概率是原列中存在带空格的分隔项(比如"123 ; 456"),可以直接查找这类行:
# 查找包含分号前后带空格的行 problem_rows = thedataframe[thedataframe['next'].str.contains(r';\s|\s;', na=False)] print("原列中格式有问题的行:") print(problem_rows)
补充说明
你之前用np.where(pd.isnull(...))找不到问题,是因为出错的是纯空格字符串' ',它不属于空值(null),pd.isnull无法识别这类无效值,必须通过转换尝试或正则匹配来定位。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

