You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas DataFrame统计某列数值的小数位数

解决方案

针对这个需求,有两种实用的处理方式,都能对DataFrame整列生效:

方法一:字符串分割法(简单直观,推荐用于字符串格式的数值)

如果你的ColB列是字符串类型,或者可以转成字符串,直接通过分割小数点来统计小数位数:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'ColA': ['A', 'B', 'C', 'D'],
    'ColB': ['.03', '.003', '10.01', '11.1']
})

# 新增DecimalPlaces列
df['DecimalPlaces'] = df['ColB'].apply(
    lambda x: len(x.split('.')[1]) if '.' in x else 0
)

如果ColB是数值类型(比如float),先转成字符串再处理:

df['ColB'] = df['ColB'].astype(str)
df['DecimalPlaces'] = df['ColB'].apply(
    lambda x: len(x.split('.')[1]) if '.' in x else 0
)

方法二:Decimal模块批量处理(适合需要严格数值精度的场景)

利用你之前尝试的decimal.Decimal,通过apply对整列批量处理:

from decimal import Decimal
import pandas as pd

df = pd.DataFrame({
    'ColA': ['A', 'B', 'C', 'D'],
    'ColB': ['.03', '.003', '10.01', '11.1']
})

# 注意:必须把数值转成字符串,避免浮点数精度误差
df['DecimalPlaces'] = df['ColB'].apply(
    lambda x: abs(Decimal(str(x)).as_tuple().exponent)
)

关键注意点

  • 若ColB是float类型,直接处理会有精度陷阱(比如11.1实际存储为近似值),一定要先转成字符串再处理,才能得到准确的小数位数。
  • 对于无小数的整数(比如10),两种方法都会返回0,符合预期。

内容的提问来源于stack exchange,提问作者foxbundle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:24:13