已尝试常规方法仍无效:如何设置Pandas默认非科学计数法显示浮点数?
解决Numpy数组默认科学计数法显示的问题
你碰到的问题其实很好理解:你设置的pd.options.display.float_format只对**Pandas的对象(比如Series、DataFrame)**的显示生效,但.values返回的是Numpy的ndarray数组——Numpy有自己独立的打印配置规则,完全不受Pandas的设置影响,所以之前的操作才没起作用。
下面给你几个实用的解决方案:
方案1:全局修改Numpy的打印规则(一劳永逸)
如果你希望所有Numpy数组都默认用非科学计数法展示,可以直接设置Numpy的全局打印选项:
import numpy as np # suppress=True 强制禁用科学计数法,precision控制小数位数 np.set_printoptions(suppress=True, precision=2)
设置完之后,再运行test_df.median().values,输出就会变成:
array([-120.00, 34.00, 29.00, 2100.00, 440.00, 1200.00, 410.00, 3.50, 180000.00, 3.00])
如果想让整数显示成不带小数的形式,可以把precision设为0,或者用更灵活的格式化逻辑。
方案2:针对单个数组自定义格式化(不影响全局)
如果你不想修改全局设置,只想处理当前这个数组,可以用Numpy的array2string方法自定义格式化规则:
import numpy as np result_array = test_df.median().values # 自定义格式化:整数显示为整数,非整数保留两位小数 formatted_str = np.array2string( result_array, formatter={'float_kind': lambda x: f'{int(x)}' if x.is_integer() else f'{x:.2f}'} ) print(formatted_str)
这样输出会更友好:
[-120 34 29 2100 440 1200 410 3.5 180000 3]
方案3:直接使用Pandas对象(避免转Numpy数组)
其实你完全可以不用转成Numpy数组——test_df.median()返回的是Pandas Series,直接打印它就会遵守你之前设置的float_format规则:
pd.options.display.float_format = '{:.2f}'.format print(test_df.median())
这样输出就是符合你预期的非科学计数格式啦。
内容的提问来源于stack exchange,提问作者Onkar N Mahajan
相关产品推荐
相关产品推荐

