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

Pandas DataFrame格式调整:指定单元格留小数+添加文本标识

分步实现指南

1. 先构建示例DataFrame(模拟你的数据场景)

首先我们创建一个和需求匹配的示例DataFrame,方便后续演示:

import pandas as pd
import numpy as np

# 模拟你的原始数据
data = {
    'Revenue': [5.78, 2965773, 1234],
    'Cost': [1200, 456.78, 7890],
    'Profit': [345.0, 6789, 1011.22]
}
df = pd.DataFrame(data, index=['Volume', 'Sales', 'Expenses'])
print("原始DataFrame:")
print(df)

2. 实现小数格式调整

通过自定义函数,针对特定单元格保留小数,其余去除小数及末尾零:

def format_decimal_rule(row):
    for col in row.index:
        # 仅保留Volume索引+Revenue列的小数(保留2位)
        if row.name == 'Volume' and col == 'Revenue':
            row[col] = f"{row[col]:.2f}"
        else:
            # 其余值转为整数(自动去除小数和末尾零)
            row[col] = str(int(np.round(row[col])))
    return row

# 应用规则到整个DataFrame
df_decimal_fixed = df.apply(format_decimal_rule, axis=1)
print("\n完成小数调整后的DataFrame:")
print(df_decimal_fixed)

3. 添加$、MM等文本标识

扩展自定义函数,为指定数值添加格式标识:

def full_format_rule(row):
    for col in row.index:
        # 先处理小数规则
        if row.name == 'Volume' and col == 'Revenue':
            formatted_val = f"{row[col]:.2f}"
        else:
            int_val = int(np.round(row[col]))
            # 为指定单元格添加标识
            if row.name == 'Sales' and col == 'Revenue':
                formatted_val = f"${int_val:,}"  # 带$和千分位
            elif row.name == 'Expenses' and col == 'Cost':
                formatted_val = f"{int_val:,} MM"  # 带千分位和MM
            else:
                formatted_val = str(int_val)
        row[col] = formatted_val
    return row

# 应用完整格式规则
df_final = df.apply(full_format_rule, axis=1)
print("\n最终格式化后的DataFrame:")
print(df_final)

4. 避免字符串转换错误的关键注意事项

  • 统一数据类型:确保所有单元格最终转为字符串类型,避免同一列混合数值和字符串导致的报错;
  • 处理浮点精度:用np.round()处理浮点数转整数时的精度问题(比如456.9会被转为457);
  • 空值判断:如果你的数据包含NaN,需在函数中添加if pd.isna(row[col]):的判断逻辑,防止报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:34:51