Python:标记每行中的列值是否包含特定单词

时间:2017-03-16 10:17:42

标签: python loops pandas for-loop

我有一个数据框,其中包含一个名为“body”的列,其中每个单元格都充满了文本字符串(即来自留言板的注释)。

我正在尝试编写遍历每一行的代码并说明单词'IT'(只需要大写)是否在单元格中,然后创建一个新列并标记行'IT_flag'。否则标记它'没有'。

我尝试过以下代码,但似乎不起作用:

test = v3['body']

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

非常感谢任何帮助

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分: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

答案 3 :(得分:0)

您无法修改您正在迭代的内容。相反,尝试(假设test是一个列表):

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

这将创建列表的副本,并将修改test中的值。

但请注意,通过在每次迭代中修改对象,您只会在最后一个单元格中得到结果。