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

将DataFrame列转为NumPy数组时丢失小数位但保留小数点的问题

解决DataFrame转NumPy数组丢失小数末尾0的问题

这个问题本质是浮点数的显示特性——浮点数在内存中以二进制形式存储,不会保留末尾的0格式,只是打印或显示时会自动省略,并非数据真的丢失了精度。下面给你几种实用的解决思路:

先确认数据本身无异常

你可以先验证转换前后的数值是否完全一致:

import numpy as np

original_vals = data.iloc[:, size_df].values
converted_arr = data.iloc[:, size_df].astype(float).to_numpy()

# 对比数值是否相等,结果应为True
print(np.array_equal(original_vals.astype(float), converted_arr))

比如原DataFrame里的1.70,转成float后存储的是1.7,但二者数值完全相等,仅显示格式不同。

若需显示时保留末尾的0

方法1:设置NumPy打印选项强制固定小数位

修改NumPy的全局打印规则,让输出时显示指定位数的小数:

np.set_printoptions(precision=2, suppress=True)  # 保留2位小数,关闭科学计数法
arr = data.iloc[:, size_df].astype(float).to_numpy()
print(arr)  # 此时会输出类似[1.70, 1.80, 1.65]的格式

方法2:转成字符串类型保留原格式

如果需要严格保留原数据的文本格式,直接将列转成字符串再转数组:

# 直接转换为字符串数组
arr_str = data.iloc[:, size_df].astype(str).to_numpy()

# 若原列为数值类型,可手动格式化指定小数位
arr_formatted = np.array([f"{val:.2f}" for val in data.iloc[:, size_df]])

方法3:用结构化数组兼顾数值类型与显示格式

如果需要同时保留数值类型和可控的显示格式,可使用结构化数组:

# 创建结构化数组,指定字段类型为float64
structured_arr = data.iloc[:, size_df].to_numpy(dtype=[('height', 'f8')])
# 打印时格式化输出
for item in structured_arr:
    print(f"{item['height']:.2f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:06:26