如何在Python3.x的不同列中基于正则表达式匹配更新另一列?
我有一个列,比如a列有字符串,另一个列B列有二进制值1/0。 我正在尝试匹配列a中的正则表达式,并相应地更新列B 如果这是我的正则表达式如何在Python3.x的不同列中基于正则表达式匹配更新另一列?,python,python-3.x,Python,Python 3.x,我有一个列,比如a列有字符串,另一个列B列有二进制值1/0。 我正在尝试匹配列a中的正则表达式,并相应地更新列B 如果这是我的正则表达式 pattern_1 = re.compile(r'\bstudent', re.IGNORECASE) 我希望这张桌子看起来像下面 A B I am a teacher 0 I am a student 1 Student group 1 通过检查每行数据,可以使用pandas创建
pattern_1 = re.compile(r'\bstudent', re.IGNORECASE)
我希望这张桌子看起来像下面
A B
I am a teacher 0
I am a student 1
Student group 1
通过检查每行数据,可以使用pandas创建dataframe并创建新列:
import pandas as pd
import re
pattern_1 = re.compile(r'\bstudent', re.IGNORECASE)
data = [['I am a teacher',0],['I am a student ',0],['Student group', 0]]
df = pd.DataFrame(data, columns =['A','B'])
print("orginal df:",df)
df['B'] = df.apply(lambda row: 1 if pattern_1.search(row.A) else row.B , axis=1)
print("\n\nmodified df:",df)
输出:
orginal df: A B
0 I am a teacher 0
1 I am a student 0
2 Student group 0
modified df: A B
0 I am a teacher 0
1 I am a student 1
2 Student group 1
您没有指定列的存储方式,但这听起来像是带有enumerate的基本for循环的作业。 假设A和B是列表:
for i, a_value in enumerate(A):
B[i] = bool(pattern_1.search(A))
非常感谢。你能告诉我如何更新已经存在的专栏吗?对于存在匹配项的情况,我只想更新“1”,如果它不是匹配项,我不想更新该字段,并希望保持它以前的状态。基本上,我有什么方法可以避免代码中的“else”部分。我编辑了我的答案,假设最初您在B列的所有数据都是0。如果条件匹配,则仅更改为1。Hello,此代码将现有的1替换为0。然而,它成功地识别了模式,更新为1,现有0保持不变。你能告诉我为什么现有的1s会出现问题吗?更新后的代码不会将1替换为0,它将搜索模式如果找到模式,它将写入1,如果没有找到,它将不会更改B列的值