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

如何格式化DataFrame:为各列补trailing zeros实现数值位数统一

问题描述

我有如下DataFrame(所有值均为字符串类型):

Col1Col2Col3
-0.0123.2nan
0-115.2
0.57.5376.88

需要通过添加末尾零,让每列的所有值保持相同的小数位数,预期结果如下:

Col1Col2Col3
-0.0123.20nan
0.000-1.0015.20
0.5007.5376.88
解决方案

用Pandas可以实现这个需求,具体步骤和代码如下:

  1. 先把字符串列转换为数值类型,将字符串"nan"转为浮点型NaN;
  2. 统计每列非NaN值的小数位数最大值,作为该列的目标补零长度;
  3. 按目标长度格式化每个数值,补全末尾零,"nan"保持原样;
  4. 将结果转回字符串类型。
import pandas as pd

# 初始化原始DataFrame
df = pd.DataFrame({
    'Col1': ['-0.012', '0', '0.5'],
    'Col2': ['3.2', '-1', '7.53'],
    'Col3': ['nan', '15.2', '76.88']
})

def format_column(col):
    # 转换为数值,字符串"nan"转为NaN
    num_col = pd.to_numeric(col, errors='coerce')
    # 统计非NaN值的小数位数
    decimal_lengths = []
    for val in num_col.dropna():
        if isinstance(val, int):
            decimal_lengths.append(0)
        else:
            decimal_part = str(val).split('.')[1]
            decimal_lengths.append(len(decimal_part))
    if not decimal_lengths:
        return col  # 全是nan的列直接返回原数据
    max_decimals = max(decimal_lengths)
    # 格式化每一个值
    formatted_list = []
    for s in col:
        if s == 'nan':
            formatted_list.append('nan')
        else:
            num = float(s)
            formatted_list.append(f"{num:.{max_decimals}f}")
    return formatted_list

# 对每一列应用格式化函数
for col_name in df.columns:
    df[col_name] = format_column(df[col_name])

print(df)

运行代码后即可得到预期的格式化结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:54:28