将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
相关产品推荐
相关产品推荐

