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

将pd.DataFrame转换为np.array时如何保留数值格式?

解决DataFrame转np.array后显示格式变化的问题

嗨,我来帮你搞定这个问题~其实你遇到的并不是数值本身的小数点位置变了,而是numpy数组的默认显示格式在搞鬼!pandas会自动用更易读的格式展示数值,但numpy对于较大或较小的数,默认会切换成科学计数法来显示,不过数组里的实际数值和DataFrame里的完全一致,精度一点没丢。

下面给你两种实用的解决方案,按需选择:

1. 调整numpy的显示设置(推荐,不改变数据类型)

只需要设置numpy的打印选项,关闭科学计数法,同时指定显示的小数位数,就能让数组和DataFrame的显示格式保持一致:

import os
import pandas as pd
import numpy as np

df = pd.read_csv("***.csv", header=0, parse_dates=['date'])
# 关键设置:关闭科学计数法,保留两位小数(根据你的数据实际小数位数调整)
np.set_printoptions(suppress=True, precision=2)
xset = np.array(df)
print(xset)
  • suppress=True:强制关闭科学计数法,所有数值都用常规小数格式显示
  • precision=2:控制显示的小数位数,你可以根据自己数据的实际情况改成3、4等

这个设置是全局生效的,之后所有numpy数组的打印都会遵循这个格式,而且完全不影响数据的类型和计算精度。

2. 格式化DataFrame后再转数组(适合仅展示场景)

如果你确实需要让数组存储的就是带指定小数位数的内容(注意:这会把数值转成字符串类型,会影响后续数值计算,谨慎使用),可以先格式化DataFrame的列:

import os
import pandas as pd
import numpy as np

df = pd.read_csv("***.csv", header=0, parse_dates=['date'])
# 对float类型的列格式化保留两位小数,int类型列保持原样
formatted_df = df.apply(
    lambda col: col.map(lambda x: f"{x:.2f}" if isinstance(x, float) else x)
)
xset = np.array(formatted_df)
print(xset)

额外验证小技巧

你可以单独打印数组里的某个元素,比如print(xset[0][0]),会发现它显示的就是原始的124.63,而不是科学计数法的形式,这就证明数值本身根本没变化~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:33:14