猿问

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

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 csv

df.dtypes

>> 

Date          object

Open         float64

High         float64

Low          float64

Close        float64

Adj Close    float64

Volume         int64

dtype: object


a = 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]])



慕田峪7331174
浏览 224回答 2
2回答

茅侃侃

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`aarray([[  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

慕田峪4524236

尝试添加:np.set_printoptions(suppress=True)作为下的第一行import numpy as np。
随时随地看视频慕课网APP

相关分类

Python
我要回答