我有一个数据框,其中包含一个名为“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"
非常感谢任何帮助
答案 0 :(得分:1)
IIUC您可以使用str.contains
和np.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
中的值。
但请注意,通过在每次迭代中修改对象,您只会在最后一个单元格中得到结果。