为了账号安全,请及时绑定邮箱和手机立即绑定

将 numpy 对象类型转换为浮点类型

将 numpy 对象类型转换为浮点类型

慕田峪7331174 2022-07-05 15:47:56
df.sample(3).values[:,1:].astype('float64')>> array([[  1.31199997e+02,   1.37149994e+02,   1.31199997e+02,          1.36320007e+02,   1.17088593e+02,   6.15015000e+05],       [  1.35199997e+02,   1.36570007e+02,   1.34330002e+02,          1.35639999e+02,   1.16504501e+02,   3.52835000e+05],       [  1.31419998e+02,   1.33500000e+02,   1.30759995e+02,          1.31779999e+02,   1.13189064e+02,   2.09805000e+05]])我正在使用 pandas 从 csv 文件中读取数据,然后将数据转换为numpy.float64但得到指数值,1.31199997e+02但预期的输出应该是正常的数字,131.199997而不是1.31199997e+02我的代码:df = pd.read_csv('data.csv')                # reading csvdf.dtypes>> Date          objectOpen         float64High         float64Low          float64Close        float64Adj Close    float64Volume         int64dtype: objecta = df.sample(3).values[:,1:]        # get array using `dataframe.values`a>> array([[131.199997, 137.149994, 131.199997, 136.320007, 117.08859299999999,        615015],       [135.199997, 136.570007, 134.330002, 135.639999, 116.504501, 352835],       [131.419998, 133.5, 130.759995, 131.779999, 113.18906399999999,        209805]], dtype=object)a = a.astype('float64')                # converting to `float64`a>> array([[  1.31199997e+02,   1.37149994e+02,   1.31199997e+02,          1.36320007e+02,   1.17088593e+02,   6.15015000e+05],       [  1.35199997e+02,   1.36570007e+02,   1.34330002e+02,          1.35639999e+02,   1.16504501e+02,   3.52835000e+05],       [  1.31419998e+02,   1.33500000e+02,   1.30759995e+02,          1.31779999e+02,   1.13189064e+02,   2.09805000e+05]])
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超22个赞

131.199997,1.31199997e+02是相同数字的等效显示。它们都是“普通花车”。


在:


array([[131.199997, 137.149994, 131.199997, 136.320007, 117.08859299999999,

        615015],

       [135.199997, 136.570007, 134.330002, 135.639999, 116.504501, 352835],

       [131.419998, 133.5, 130.759995, 131.779999, 113.18906399999999,

        209805]], dtype=object)

每个元素都是 Python 浮点数,并且无论值如何,都会单独格式化。注意有些字符串很长,有些则很短。


在:


a = a.astype('float64')                # converting to `float64`

a

array([[  1.31199997e+02,   1.37149994e+02,   1.31199997e+02,

          1.36320007e+02,   1.17088593e+02,   6.15015000e+05],

       [  1.35199997e+02,   1.36570007e+02,   1.34330002e+02,

          1.35639999e+02,   1.16504501e+02,   3.52835000e+05],

       [  1.31419998e+02,   1.33500000e+02,   1.30759995e+02,

          1.31779999e+02,   1.13189064e+02,   2.09805000e+05]])

数组作为一个整体显示,使用的格式对于较小的值 ( 1e2, 100) 和较大的值 ( 1e5, ) 都同样适用100000。使用这种格式,它使用整齐的列,显示二维数组结构。


虽然您可以控制如何numpy显示此类数组,但它不会更改基础数值。对于快速numpy计算,您需要这个 numeric dtype,而不是那个object。


试试df.sample(3).values[:,1:-1]。那应该只是周围的浮点值100。209805这是触发科学记数法的最后一个整数列。


更好的是,在应用之前从数据框中选择列“Open,High,Low,Close,Adj Close” .values。这些都是float64dtype,结果数组也将具有该 dtype。单独选择整数volume列。您已经分别处理字符串/对象date列。


尝试:


a = df[df.columns[1:-1]].sample().values


查看完整回答
反对 回复 2022-07-05
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

尝试添加:

np.set_printoptions(suppress=True)

作为下的第一行import numpy as np


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号