pandas按下划线分割文件名加列时报int() base10转换错误如何解决
错误原因
- 代码逻辑和需求不匹配:你需要提取的是下划线之后、.jpg后缀之前的数值,但当前代码里
img_name.split("_")[0]取的是下划线前的第一段内容,报错信息中的combined就是文件名第一段的内容,自然无法转换为整数 - 缺少后缀处理步骤:即使正确取到下划线后的内容,也会携带
.jpg后缀,直接转整数也会触发格式错误
解决方法
方法1:修正原有分割逻辑
适合文件名格式固定为[前缀]_[数值].jpg、仅包含一个下划线的场景:
master_df['age'] = master_df['filename'].map( lambda img_name : np.uint8( img_name.split("_")[1] # 取下划线后的第一段内容 .replace(".jpg", "") # 移除.jpg后缀 ) )
方法2:正则提取(更推荐)
容错性更高,不受文件名前缀下划线数量、后缀大小写影响,直接匹配目标数值:
# 正则规则:匹配下划线后的连续数字,直到遇到.jpg为止 master_df['age'] = master_df['filename'].str.extract(r'_(\d+)\.jpg').astype(np.uint8)
可选异常处理
如果存在部分不符合命名规则的文件,可提前过滤避免运行报错:
# 筛选符合「前缀_数字.jpg」格式的文件 valid_file_mask = master_df['filename'].str.match(r'^.*_\d+\.jpg$', na=False) print(f"过滤不符合规则的文件数量:{ (~valid_file_mask).sum() }") # 仅为合规文件赋值age master_df.loc[valid_file_mask, 'age'] = master_df.loc[valid_file_mask, 'filename'].str.extract(r'_(\d+)\.jpg').astype(np.uint8)
内容的提问来源于stack exchange,提问作者SMR
相关产品推荐
相关产品推荐

