2015-11-30 75 views
0

我試圖將我有的.values轉換成一個數組,它有一個函數,但不斷出現一個錯誤。將不勝感激的幫助!np.array內的函數

這裏是.values:

Y = df['GDP_growth'].values 
array(['3.299991384', '-1.760010328', '5.155440545', '4.019541839', 
     '0.801760179', '7.200000003', '3.727818428', '0.883846197'], dtype-object) 

這裏是使出來作爲一個錯誤的數組命令:

Y = np.array([1 if y>= 3 else 0 for y in Y]) 

在我的情況下,錯誤的是,這一切都爲1.

+0

並且錯誤是什麼意思? 'for'應該在列表解析中的'if'之前。你的'np.array'也填充了字符串而不是數字。你有很多事情要在這裏解決...... – Julien

+0

不要爲''for' /'if'命令,太快讀它。 – Julien

回答

0

你可以使用numpy的過濾,但首先你需要從strobject改變類型floatnp.float因爲你需要:

import numpy as np 
Y = np.array(['3.299991384', '-1.760010328', '5.155440545', '4.019541839', 
    '0.801760179', '7.200000003', '3.727818428', '0.883846197'], dtype=object) 
Y = Y.astype(float) 

Y[Y<=3] = 0 
Y[Y>3] = 1 

In [67]: Y 
Out[67]: array([ 1., 0., 1., 1., 0., 1., 1., 0.]) 

編輯

如果你需要一些預處理將數據轉換爲數字值,你可以使用to_numeric然後dropna到一系列有趣或whole dataframe,即串聯:

z = pd.Series(Y) 
z[0] = 'a' 

In [293]: z 
Out[293]: 
0    a 
1 -1.760010328 
2  5.155440545 
3  4.019541839 
4  0.801760179 
5  7.200000003 
6  3.727818428 
7  0.883846197 
dtype: object 

pd.to_numeric(z, errors='coerce').dropna() 

In [296]: pd.to_numeric(z, errors='coerce').dropna() 
Out[296]: 
1 -1.760010 
2 5.155441 
3 4.019542 
4 0.801760 
5 7.200000 
6 3.727818 
7 0.883846 
dtype: float64 
+0

不幸的是它仍然出現這個錯誤:---------------------------------------- ----------------------------------- ValueError Traceback(最近呼叫的最後一個) () ----> 1 Y = Y.astype(float) ValueError:無法將字符串轉換爲float:.. –

0

想通了!顯然我有一些缺失的值表示爲'..',所以我不得不通過刪除那些行來將它們爭吵 - 然後我可以應用.astype