【发布时间】:2015-02-02 12:42:24
【问题描述】:
我使用了很多 stata,但在我的新工作中,他们不会为我支付许可证,而且 excel 不足以做好工作。
我想知道如何使用条件(Pandas 中的 DataFrame)替换列中的值。
我试过了:
spot['tipo'] = np.where(['programa']=='CLASSIFICADOES' & ['espec']=='', 'N')
这给了我
TypeError: unsupported operand type(s) for &: 'str' and 'list'
并尝试过:
spot.ix('programa'=='CLASSIFICADOES' & ['espec']=='', 'tipo') = 'N'
这给了我:
SyntaxError: can't assign to function call
和:
spot.replace(['tipo'],['N']) if spot['programa'] == 'CLASSIFICADOES' & ['espec']==''
这是一个无效的语法。 (这个和我在 stata 上做的更相似) 我在处理字符串时遇到了很多问题,我通常可以在网上找到一些解决方案的数字部分。
In [79]: spot.dtypes
Out[79]:
marca object
data object
rede object
tipo object
programa object
titulo object
valor float64
cm int64
col int64
area int64
descr object
espec object
dtype: object
【问题讨论】:
-
不正确的语法,应该是:
spot['tipo'] = np.where((spot['programa']=='CLASSIFICADOES') & (spot['espec']=='', 'N'))注意由于运算符优先级而需要使用括号,并且您需要索引 df 本身,您比较的是一个包含单个条目的列表一个字符串 -
嘿 Ed,这给了我“ValueError:操作数无法与形状一起广播 (4692,) (2,)”
-
尝试:
spot['tipo'] = np.where((spot['programa']=='CLASSIFICADOES') & (spot['espec']=='', 'N', spot['tipo'])),无论如何我认为我的回答向您展示了另一种应该有效的方法 -
我想我在第一条评论中有错字试试这个:
spot['tipo'] = np.where((spot['programa']=='CLASSIFICADOES') & (spot['espec']==''), 'N')第二个条件的右括号在错误的位置
标签: python string numpy pandas