python字符串替换条件

时间:2014-12-04 15:09:41

标签: python string numpy pandas

我使用了很多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

2 个答案:

答案 0 :(得分:0)

您尝试过的内容有多处错误:

spot['tipo'] = np.where(['programa']=='CLASSIFICADOES' & ['espec']=='', 'N')

应该是:

spot['tipo'] = np.where((spot['programa']=='CLASSIFICADOES') & (spot['espec']==''), 'N', spot['tipo'])

注意使用由于运算符优先级而需要的括号,你需要索引df本身,你比较的是一个带有单个条目的列表,这是一个字符串。

spot.ix('programa'=='CLASSIFICADOES' & ['espec']=='', 'tipo') = 'N'

应该是:

spot.ix[(spot['programa']=='CLASSIFICADOES') & (spot['espec']==''), 'tipo'] = 'N'

出于与上述相同的原因

答案 1 :(得分:0)

我认为你应该使用这样的东西

Var= 'Yes' if fruit == 'Apple' else 'No'

在你的情况下,我不完全理解你的代码,但我认为meybe是这样的。

spot['tipo'] = 'N' if (np.where(['programa']=='CLASSIFICADOES' & ['espec']=='')) else ''