Pandas新增数字各位求和列触发ValueError:int()转换空格错误如何解决
问题解决方案
报错根因
你编写的代码直接对整列serie['num'](pandas Series对象)执行str()转换,返回的是Series的格式化打印字符串,包含索引、元素分隔空格、换行符等非数字字符,执行map(int, ...)时碰到非数字字符就会抛出ValueError。
正确实现方式
方法1:逐行apply处理(易理解,适合中小数据集)
直接对每一行的num值单独处理,转字符串后逐位求和:
import pandas as pd serie = pd.DataFrame({'num':[133,2342,313,4495,4939,19081993,80]}) serie['sum_num'] = serie['num'].apply(lambda x: sum(int(d) for d in str(x)))
运行后输出结果:
num sum_num 0 133 7 1 2342 11 2 313 7 3 4495 22 4 4939 25 5 19081993 40 6 80 8
方法2:向量化处理(高性能,适合超大数据集)
用pandas原生字符串向量化操作,避免apply的循环开销:
serie['sum_num'] = serie['num'].astype(str).str.split('').explode().astype(int).groupby(level=0).sum()
内容的提问来源于stack exchange,提问作者Keliby Nathan
相关产品推荐
相关产品推荐

