为何无法对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
相关产品推荐
相关产品推荐

