2017-03-16 41 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 
相关问题