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

Python Pandas如何让原始索引行保留int、新增计算行保持指定float格式

问题原因

你遇到的类型自动转换是Pandas的默认机制:DataFrame的单列要求存储同类型数据,当你往int类型的列中插入float类型的值时,整列会被自动向上转型为float,原有整数就会变成带.0的浮点格式。另外你提供的代码里有笔误:lfoc、floc都是错误写法,正确的行索引访问属性是loc。

实现代码

方法1:修改存储类型,保留原有int值

如果需要数据本身存储为原有int、新增行为float的格式,可以先把列转为支持混合类型存储的object类型,再插入计算后的新行:

import pandas as pd

# 计算new1行的数值:(DEF - GHI)/DEF *100 保留1位小数
# 若需要截断而非四舍五入,可把.round(1)替换为.apply(lambda x: float(f"{x:.1f}"))
new1_vals = ((df.loc['DEF'] - df.loc['GHI']) / df.loc['DEF'] * 100).round(1)

# 将原有DataFrame列转为object类型,支持混合存储int和float
df = df.astype(object)

# 插入新行
df.loc['new1'] = new1_vals

方法2:仅格式化显示,不修改原始数据类型

如果你只需要输出展示时符合格式要求,不需要修改数据的存储类型,可以用Pandas的样式格式化功能:

# 计算插入新行(此时整列会转为float,原有整数会显示为x.0)
df.loc['new1'] = ((df.loc['DEF'] - df.loc['GHI']) / df.loc['DEF'] * 100).round(1)

# 输出时仅对new1行保留1位小数,其他行显示为整数
df.style.format(precision=0, subset=pd.IndexSlice[df.index.difference(['new1']), :])\
        .format(precision=1, subset=pd.IndexSlice['new1', :])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:54:04