簡體   English   中英

將 numpy 對象類型轉換為浮點類型

[英]Convert numpy object type to float type

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

我正在使用numpy.float64從 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]])

數據.csv

Date,Open,High,Low,Close,Adj Close,Volume
2013-05-08,135.199997,136.570007,134.330002,135.639999,116.504501,352835
2013-05-09,135.800003,138.940002,135.199997,136.259995,117.037041,952515
2013-05-10,136.199997,138.199997,135.009995,135.389999,116.289780,444045
2013-05-13,135.000000,136.000000,131.639999,132.539993,113.841843,260395
2013-05-14,131.419998,133.500000,130.759995,131.779999,113.189064,209805
2013-05-15,131.199997,137.149994,131.199997,136.320007,117.088593,615015

131.1999971.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計算,您需要這個數字dtype ,而不是object

嘗試df.sample(3).values[:,1:-1] 那應該只是大約100的浮點值。 這是觸發科學記數法的最后一個整數列,其值為209805

更好的是,在應用.values之前,從數據框中選擇列“Open,High,Low,Close,Adj Close”。 這些都是float64 dtype,結果數組也將具有該 dtype。 單獨選擇整數volume列。 您已經在單獨處理字符串/對象date列。

嘗試:

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

嘗試添加:

np.set_printoptions(suppress=True)

作為import numpy as np下的第一行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM