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
相关产品推荐
相关产品推荐

