Python中如何将Series提取内容转为普通数值?求助
解决方法
先排查提取内容的有效性
先执行print(a["recency"].str[:1].unique()),查看切片后的内容是否都是纯数字字符串。如果存在空值、非数字字符或者长度大于1的元素,就会导致转换失败。用pd.to_numeric()安全转换
这是Pandas中转换数值类型的最优方法,支持错误处理:# 提取并转换,errors="coerce"将无效值转为NaN a["days"] = pd.to_numeric(a["recency"].str[:1], errors="coerce")正则提取适配复杂格式
如果recency列的格式不固定(比如有"1 day"、"15 days"这类不同位数的情况),切片取前1位会出错,改用正则提取所有数字:import re # 提取字符串中第一个数字,无数字则返回None a["days"] = a["recency"].apply(lambda x: int(re.findall(r'\d+', x)[0]) if re.findall(r'\d+', x) else None)修复map转换的用法
你用map报错是因为map对象不能直接转为Series,需要先转成列表:# 仅当切片后所有元素都是可转int的纯数字时可用 a["days"] = pd.Series(list(map(int, a["recency"].str[:1])))
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

