Python:标志如果每行中的列值包含特定的单词
问题描述:
我有一个数据框,其中包含一个名为“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"
任何帮助是极大的赞赏
答
尝试使用此
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
答
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
答
不能修改的你通过迭代的东西的内容。相反,尝试(假设test
是一个列表):
for i in list(test):
**do stuff**
这将创建列表的副本,并将在test
修改数值。
但请注意,通过在每次迭代中修改对象,您只会在最后一个单元格中显示结果。
答
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
您能详细说明吗?因为对我来说,你解释的正是代码也是这样做的。 – Vallentin