[英]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.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
計算,您需要這個數字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.