如何在pandas DataFrame指定列中将小数点放置在第2位数字后
Pandas指定列第2位数字后插入小数点实现方案
原有代码错误原因
- apply传入的lambda参数x是B列的单个字符串元素,不需要再通过
df[B][x]索引取值,你混淆了行索引和元素值 - 对单个字符串调用仅Series支持的
.str访问器,会直接触发报错 - lambda内部额外嵌套列表推导式遍历全表属于冗余逻辑,apply本身会自动逐行处理列元素
正确实现代码
首先构造测试数据验证效果:
import pandas as pd # 测试数据和你的输入结构一致,B列为object类型 df = pd.DataFrame({ 'A': [1, 2, 3], 'B': ['15', '346.52', '25678'] })
处理逻辑:
# 第一步:移除B列所有原有小数点 df['B'] = df['B'].str.replace('.', '', regex=False) # 第二步:第2位后插入小数点,自动处理长度<=2的情况 # 不需要数值计算可去掉.astype(float),保留字符串格式和预期显示完全一致 df['B'] = (df['B'].str[:2] + '.' + df['B'].str[2:]).str.rstrip('.').astype(float)
代码说明
- 用Pandas原生的
.str切片方法批量处理全列,无需嵌套循环或apply,性能更高 - 对于长度等于2的数值,
str[2:]返回空字符串,拼接后会得到末尾带小数点的字符串,用.rstrip('.')直接移除多余小数点 - 处理后的输出和你要求的预期结果完全一致:
A B 0 1 15.000 1 2 34.652 2 3 25.678
内容的提问来源于stack exchange,提问作者think-maths
相关产品推荐
相关产品推荐

