如何在Pandas DataFrame数组转整数时删除元素附带的字母字符
解决方案
你原来的写法存在两个明显问题:一是逐行链式索引赋值效率极低,且容易触发SettingWithCopyWarning导致赋值失效;二是没有提前清洗带后缀非数字字符的字符串,直接转int必然报错。
直接用正则提取每个字符串开头的连续数字段再转类型即可,不用逐字符判断,整列用apply处理比写循环索引高效得多:
- 第一步:导入正则库
import re
- 第二步:定义针对单个数组的清洗逻辑
def clean_arr(arr): # 匹配每个字符串开头的连续数字,直接转整数 return [int(re.search(r'^\d+', item).group()) for item in arr]
- 第三步:一次性处理整列数据
df['ColumnA'] = df['ColumnA'].apply(clean_arr)
效果验证
拿你给出的第37行样本测试:
原数组里的'62A'、'62B'会被提取开头的62转成整数,其余纯数字字符串正常转换,最终得到全int类型的数组,不会触发类型转换报错。
异常兼容(可选)
如果你的数据里可能存在开头无数字的异常值(比如全字母字符串、空值),可以给清洗逻辑加个判断避免抛错:
def clean_arr(arr): cleaned = [] for item in arr: num_match = re.search(r'^\d+', item) if num_match: cleaned.append(int(num_match.group())) # 异常值可按需处理:比如跳过、补默认值0、存为None都可以 return cleaned
注意:不要继续用
for i in range(len(df))+df[列名][i]的写法,这种链式索引在pandas中属于不推荐的操作,赋值结果不可控,用矢量化操作或者apply处理列是更稳妥的选择。
内容的提问来源于stack exchange,提问作者drorhun
相关产品推荐
相关产品推荐

