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

如何将Pandas DataFrame中列的小数位数与其他列统一?

Pandas 根据目标列小数位数统一其他列格式

Pandas的列本身没有内置的「小数位数配置」属性,因为数值型列存储的是原始数值(如float64),显示的小数位数只是格式化结果,并非数据本身的属性。要实现指标列与OHLC列小数位数统一,有两种可行方案:

方案1:从目标列数据推断小数位数

遍历OHLC列的非空值,计算每个值的小数位数,取最具代表性的数值(比如出现次数最多的模式值,或最大值,依业务场景而定)。

示例代码:

import pandas as pd

def get_decimal_count(series):
    # 过滤空值
    valid_vals = series.dropna()
    if valid_vals.empty:
        return 0
    # 转字符串处理,兼容科学计数法
    str_vals = valid_vals.astype(str).str.replace(r'e[+-]\d+', '', regex=True)
    # 提取小数部分长度
    decimal_lengths = str_vals.str.split('.').str[1].str.len()
    # 返回出现次数最多的小数位数(也可改用max()取最大长度)
    return decimal_lengths.mode().iloc[0]

# 示例DataFrame
df = pd.DataFrame({
    'Open': [320.15, 321.26, 322.37],
    'High': [320.25, 321.36, 322.47],
    'Low': [320.05, 321.16, 322.27],
    'Close': [320.15, 321.26, 322.37],
    'RSI': [56.7890, 57.8901, 58.9012],
    'MACD': [0.123456, 0.234567, 0.345678]
})

# 获取OHLC列的目标小数位数(以Open列为代表)
target_digits = get_decimal_count(df['Open'])

# 将指标列统一为目标小数位数
indicator_cols = ['RSI', 'MACD']
df[indicator_cols] = df[indicator_cols].round(target_digits)

print(df)

方案2:按业务规则预设小数位数

如果明确不同品类的小数位数规则(如指数类OHLC保留2位,EURUSD保留5位),直接按规则指定即可,无需从数据推断,结果更可靠。

示例代码:

# 根据品类预设小数位数
asset_type = 'index'  # 切换为'forex'则对应外汇规则
target_digits = 2 if asset_type == 'index' else 5

# 统一指标列格式
indicator_cols = ['RSI', 'MACD']
df[indicator_cols] = df[indicator_cols].round(target_digits)

关键注意点

  • 科学计数法处理:若数据以科学计数法存储,需先转换为普通字符串再计算小数位数
  • 空值过滤:计算前务必过滤NaN值,避免干扰结果
  • 规则优先级:业务规则明确时优先用预设方案,避免数据中异常值导致推断错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:56:01