2014-12-04 42 views
1

我用了很多stata,但在我的新工作中,他們不會爲我執行許可證,而且excel還不足以完成一項好工作。python字符串替換條件

我想知道如何使用條件(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

不正確的語法,應該是:'發現[ 'TIPO'] = np.where((點[ 'programa'] == 'CLASSIFICADOES')(點[ 'ESPEC'] == '', 'N'))'注意使用由於運算符優先級而需要的括號,並且您需要爲df本身編制索引,您所比較的是帶有單個條目的列表,這是一個字符串 – EdChum 2014-12-04 15:12:26

+0

Hey Ed,這給了我「ValueError :操作數無法與形狀一起播放(4692,)(2,)「 – 2014-12-04 15:14:34

+0

嘗試:'spot ['tipo'] = np.where((spot ['programa'] =='CLASSIFICADOES')&(spot [ 'espec'] =='','N',spot ['tipo']))',無論如何,我認爲我的答案顯示了另一種應該工作的方法 – EdChum 2014-12-04 15:16:09

回答

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' 

出於同樣的原因如上

+0

'spot ['tipo'] = np.where ),'N')'似乎是正確的,但現在python告訴我np.where應該既有x,y也沒有。我只給了x,我希望「否則它保持相同的值」 'spot.ix((spot ['programa'] =='CLASSIFICADOES')&(spot ['espec'] =='') ,'tipo')='N''給我同樣的錯誤 – 2014-12-04 15:20:57

+0

嘗試:'spot ['tipo'] = np.where((spot ['programa'] =='CLASSIFICADOES')&(spot ['espec' ] ==''),'N',spot ['tipo'])' – EdChum 2014-12-04 15:22:00

+0

這是IT編輯!謝謝,實際上它不會給我一個錯誤,也不會做任何事情。但如果我使用另一個條件,除了espec ==''它完美的作品,所以我的數據espec,字符串必須是凌亂的。但這是另一個問題。你解決了我的一段代碼。謝謝! – 2014-12-04 15:38:00

0

我認爲你應該使用這樣的事情

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

在你的情況我不完全理解你的代碼,但我認爲meybe就是這樣。

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

我得到TypeError:不支持的操作數類型爲&:'str'和'list'' – 2014-12-04 15:34:36

+0

我需要看看以瞭解這個變量中的內容。 「np」來自哪裏。哪裏「espec」? python操作符是「和」我的錯誤。 (np.where(['programa'] =='CLASSIFICADOES'和['espec'] ==''))'else'' – user1532647 2014-12-04 16:31:27

+0

我把numpy作爲np和pandas導入爲標準的東西。 正如我所說,我使用的數據幀在熊貓dataframe = spot spot ['espec']調用名爲espec 列我解決了與np.where不使用如果然後其他。 (np.where已經這樣做) 我的解決方案: 'spot ['tipo'] = np.where((spot ['programa'] =='CLASSIFICADOES')&pd.isnull(spot ['espec' ]),'N',(spot ['tipo']))' – 2014-12-04 16:42:03