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

为何无法对DataFrame中float64类型列执行取整操作?

问题:DataFrame指定列取整后仍显示全部小数位

我尝试对DataFrame中的Average列(float64类型)取整到5位小数,但操作后该列依然显示全部小数位(甚至以科学计数法呈现)。

我的代码

# 将对象类型转换为float
covid2=covid.fillna(1)
covid2.replace(',','', regex=True, inplace=True)
covid2['Population'] = covid2['Population'].astype(float, errors = 'raise')
covid2['Total Deaths'] = covid2['Total Deaths'].astype(float, errors = 'raise')

# 计算Average列
covid2['Average']=covid2['Population']/covid2["Total Deaths"]*1000

# 尝试取整
decimals = 5    
covid2['Average'] = covid2['Average'].apply(lambda x: round(x, decimals))
covid2.head()

执行结果

0      2.955203e+05
1      2.650322e+06
2      3.993382e+05
3      5.062042e+05
4      3.089394e+05

原因与解决方案

核心原因

你的取整操作已经生效,问题出在Pandas的默认显示设置:大数值会被自动转换为科学计数法,且默认显示的小数位数多于你设置的5位,导致看起来像是没取整。你可以通过covid2['Average'].iloc[0]查看单个值,会发现实际已经是取整后的数值。

解决方法

  • 修改全局显示格式:让所有float列按指定格式展示,禁用科学计数法

    import pandas as pd
    # 全局设置:禁用科学计数法,显示5位小数
    pd.set_option('display.float_format', lambda x: '%.5f' % x)
    covid2.head()
    
  • 高效取整+显示设置:用Pandas原生round方法替代apply(性能更优),再配合显示设置

    decimals = 5
    # 原生round方法直接处理整列
    covid2['Average'] = covid2['Average'].round(decimals)
    # 设置显示格式
    pd.set_option('display.float_format', lambda x: '%.5f' % x)
    print(covid2['Average'].head())
    
  • 仅修改显示格式(不改变数值类型):如果只是需要展示指定小数位,可将列转为带格式的字符串

    covid2['Average'] = covid2['Average'].apply(lambda x: '%.5f' % x)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:28:26