2017-02-23 34 views
0

我有多個行數據陣列,像這樣:轉換STR漂浮後,numpy的陣列返回字符串

['20.57', '17.77', '132.9', ..., '0.07017', '0.1812', '0.05667'] 

,我需要將其轉換爲浮動。 第一行是功能名稱。

當我試圖做到以下幾點:

for i in features[1,:]: 
    i = i.astype(np.float) 

並打印每個i,它打印花車:

20.57 
17.77 
132.9 
and so on 

然而,當我打印 「功能」,我得到:

['20.57', '17.77', '132.9', ..., '0.07017', '0.1812', '0.05667'] 

我在做什麼錯,怎麼解決這個問題?

回答

1

你可以通過創建一個新的列表

features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.05667'] 
featuresFloat = [] 
for i in features: 
    featuresFloat.append(float(i)) 
print featuresFloat 

這可能不適合大型數據集最佳的解決方案,雖然它確實給可讀的代碼做到這一點

+1

其實,我只是做了類似的: floatfeatures = features [1:] floatfeatures = np.array(floatfeatures,dtype = float) 它工作。 – nanachan

0

只是做

features=features.astype(float) 

當你做我= i.astype(浮動),您不影響陣列。 並且記住循環數組通常是一個糟糕的主意:改爲使用數組方法。

+0

我有成千上萬的行。 如果我做功能[1,:] = np.array(features [1,:])。astype(float),它仍然返回字符串數組。 – nanachan

+0

是的。你必須適用於整個陣列。 –

+0

即使我應用到整個數組,它仍然返回字符串。 – nanachan

1

除非你的陣列的dypeobject(唐」這樣做),或者你有一個結構化數組,你不能有多個dtypes。所以如果你在數組中放入一個字符串,numpy會將它們全部轉換爲字符串。

最好的辦法是將數組分成兩部分。

fNames=features[0,:] 
features=features[1,:].astype(float) 

如果你有很多不同類型的列,你可能想將它轉換成一個structured array

0

,當我做了以下它的工作:

floatfeatures = features[1:] 
floatfeatures = np.array(floatfeatures, dtype=float) 

我不知道如果這是最親切的方式來做到這一點,但它的工作。

0

請從列表中簡單的數組:

In [26]: features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'] 
In [27]: features 
Out[27]: ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'] 
In [28]: features = np.array(features) 
In [29]: features 
Out[29]: 
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'], 
     dtype='<U7') 

請注意,這是一個字符串數組

我可以用astype,使花車的一個新的數組:

In [30]: features.astype(float) 
Out[30]: 
array([ 2.05700000e+01, 1.77700000e+01, 1.32900000e+02, 
     7.01700000e-02, 1.81200000e-01, 6.67000000e-01]) 

但是這並不會改變原始的features陣列。它仍然是字符串。

In [31]: features 
Out[31]: 
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'], 
     dtype='<U7') 

我不得不重新分配features變量獲得一個新的浮動陣列

In [32]: features = features.astype(float) 
In [33]: features 
Out[33]: 
array([ 2.05700000e+01, 1.77700000e+01, 1.32900000e+02, 
     7.01700000e-02, 1.81200000e-01, 6.67000000e-01]) 

我可以直接去從字符串列表中的float數組:

In [34]: features = ['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'] 
In [35]: features = np.array(features,float) 
In [36]: features 
Out[36]: 
array([ 2.05700000e+01, 1.77700000e+01, 1.32900000e+02, 
     7.01700000e-02, 1.81200000e-01, 6.67000000e-01]) 

但是,如果列表中有任何字符串不能轉換爲浮點數,我會得到一個錯誤或一個字符串數組。

另外我不能就地或變化零碎

In [40]: features[1] = float(features[1]) 
In [41]: features 
Out[41]: 
array(['20.57', '17.77', '132.9', '0.07017', '0.1812', '0.667'], 
     dtype='<U7') 

features陣列被固定爲U7;我無法改變它漂浮;我只能創建一個從原始值派生的新數組。