2015-11-30 36 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