2017-03-16 71 views
2

我有一個數據框,其中包含一個名爲「body」的列,其中每個單元格都充滿了文本字符串(即來自留言板的註釋)。Python:標誌如果每行中的列值包含特定的單詞

我嘗試編寫代碼的每一行去,並說,如果這個詞「IT」(僅需要大寫)是在細胞中,然後創建一個新的列和標籤行「IT_flag」。否則標籤。它「無」

我曾嘗試下面的代碼,但它似乎並沒有工作:

test = v3['body'] 

for i in test: 
    if 'IT' in i: 
     test['IT_Flag'] = "IT_Flag" 
    else: 
     test['IT_Flag'] = "None" 

任何幫助是極大的讚賞

+1

您能詳細說明嗎?因爲對我來說,你解釋的正是代碼也是這樣做的。 – Vallentin

回答

0

嘗試使用此

import pandas as pd 
    df = {"A": ['IT is here', "it ain't here", 'this is it', "IT headquarters"]} 
    df = pd.DataFrame(df) 

    print(df) 
#      A 
# 0  IT is here 
# 1 it ain't here 
# 2  this is it 
# 3 IT headquarters 


    def check_it(input_str): 
     if "IT" in input_str: 
      return True 
     return False 

    df.loc[:, 'flag'] = df.A.apply(check_it) 

    print(df) 
#     A flag 
# 0  IT is here True 
# 1 it ain't here False 
# 2  this is it False 
# 3 IT headquarters True 
+0

天才!非常感謝 – PineNuts0

1

IIUC可以使用str.containsnp.where轉換的布爾數組爲字符串:

In [123]: 
df = pd.DataFrame({'body':['asdad kkn', 'IT1', 'IT', 'It', 'XIT']}) 
df 

Out[123]: 
     body 
0 asdad kkn 
1  IT1 
2   IT 
3   It 
4  XIT 

In [125]: 
df['IT_flag'] = np.where(df['body'].str.contains('^IT$'), 'IT_flag', 'None') 
df 

Out[125]: 
     body IT_flag 
0 asdad kkn  None 
1  IT1  None 
2   IT IT_flag 
3   It  None 
4  XIT  None 
0

不能修改的你通過迭代的東西的內容。相反,嘗試(假設test是一個列表):

for i in list(test): 
    **do stuff** 

這將創建列表的副本,並將在test修改數值。

但請注意,通過在每次迭代中修改對象,您只會在最後一個單元格中顯示結果。

0
In [1]: import pandas as pd 

In [3]: df = pd.DataFrame({'body':['asdad kkn', 'IT1', 'IT', 'It', 'XIT']}) 

In [6]: df['IT_flag'] = df['body']=='IT' 

In [7]: df 
Out[7]: 
     body IT_flag 
0 asdad kkn False 
1  IT1 False 
2   IT True 
3   It False 
4  XIT False 
相關問題