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