Python 使用字符串包含和循环创建新的类别列

Python 使用字符串包含和循环创建新的类别列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个如下所示的数据框: name Title abc 'Tech support' xyz 'UX designer' ghj 'Manager IT' ... .... cat_dict = {"Support":"Support", "designer":"Designer&qu

我有一个如下所示的数据框:

   name             Title
    abc          'Tech support'
    xyz          'UX designer'
    ghj          'Manager IT'
     ...            ....
cat_dict = {"Support":"Support", "designer":"Designer", "Manager": "Management"}

df['category'] = (df['Title'].str.extract(fr"\b({'|'.join(cat_dict.keys())})\b")[0]
                    .map(cat_dict)
                 )
我想遍历数据帧,并使用
df.str.contains
创建另一列,对这些作业进行分类。共有8类

输出将是:

name              Title             category
abc           'Tech support'         'Support' 
xyz           'UX designer'          'Design'
ghj           'Manager IT'           'Management'
...              ....              ....
以下是我迄今为止所尝试的:

for i in range(len(df)):
    if   df.Title[i].str.contains("Support"):
            df.category[i]=="Support"
    elif df.Title[i].str.contains("designer"):
            df.category[i]=="Design"
    else df.Title[i].str.contains("Manager"):
            df.category[i]=="Management"
当然,我是个编程高手,这会引发错误:

  File "<ipython-input-29-d9457f9cb172>", line 6
    else df.Title[i].str.contains("Manager"):
          ^
SyntaxError: invalid syntax
文件“”,第6行
else df.Title[i].str.contains(“管理者”):
^
SyntaxError:无效语法

python if语句的一般语法为:

if test expression:
     Body of if
elif test expression:
     Body of elif
else: 
     Body of else
正如您在语法中看到的,要计算测试表达式,它应该在if或elif构造中。当测试表达式放置在else构造中时,代码抛出语法错误。考虑将最后的另一个更改为ELIF,并为错误添加一个倒退情况,例如:

else:
    df.category[i]=="Others"

python if语句的一般语法为:

if test expression:
     Body of if
elif test expression:
     Body of elif
else: 
     Body of else
正如您在语法中看到的,要计算测试表达式,它应该在if或elif构造中。当测试表达式放置在else构造中时,代码抛出语法错误。考虑将最后的另一个更改为ELIF,并为错误添加一个倒退情况,例如:

else:
    df.category[i]=="Others"

您可以这样做:

   name             Title
    abc          'Tech support'
    xyz          'UX designer'
    ghj          'Manager IT'
     ...            ....
cat_dict = {"Support":"Support", "designer":"Designer", "Manager": "Management"}

df['category'] = (df['Title'].str.extract(fr"\b({'|'.join(cat_dict.keys())})\b")[0]
                    .map(cat_dict)
                 )

您可以这样做:

   name             Title
    abc          'Tech support'
    xyz          'UX designer'
    ghj          'Manager IT'
     ...            ....
cat_dict = {"Support":"Support", "designer":"Designer", "Manager": "Management"}

df['category'] = (df['Title'].str.extract(fr"\b({'|'.join(cat_dict.keys())})\b")[0]
                    .map(cat_dict)
                 )
这个答案:应该让你走

Lmk,如果你有更多的问题

这个答案:你应该走了

Lmk,如果你有更多的问题

给你:

将熊猫作为pd导入
从io导入StringIO
df=pd.read\u csv(StringIO(“”)
姓名和头衔
abc技术支持
xyz用户体验设计器
ghj IT经理
“”),sep='\s{2,}',engine='python')
掩码=[df.Title.str.lower().str.contains('support'),
df.Title.str.lower().str.contains('designer'),
df.Title.str.lower().str.contains('manager')
]
值=[
"支持",,
"设计",,
“管理”
]
将numpy作为np导入
df['Category']=np.select(掩码、值、默认值='Unknown')
打印(df)
输出:

  name         Title    Category
0  abc  Tech support     Support
1  xyz   UX designer      Design
2  ghj    Manager IT  Management
给你:

将熊猫作为pd导入
从io导入StringIO
df=pd.read\u csv(StringIO(“”)
姓名和头衔
abc技术支持
xyz用户体验设计器
ghj IT经理
“”),sep='\s{2,}',engine='python')
掩码=[df.Title.str.lower().str.contains('support'),
df.Title.str.lower().str.contains('designer'),
df.Title.str.lower().str.contains('manager')
]
值=[
"支持",,
"设计",,
“管理”
]
将numpy作为np导入
df['Category']=np.select(掩码、值、默认值='Unknown')
打印(df)
输出:

  name         Title    Category
0  abc  Tech support     Support
1  xyz   UX designer      Design
2  ghj    Manager IT  Management

else
也应该是
elif
正确的python语法是
elif:
else:
。您忘记了
else也应该是
elif
正确的python语法是
elif:
else:
。您忘记了
。如果使用您的代码片段,我会收到此错误<代码>类型错误:condlist中的无效条目0:在
df['Category']=np行中应为布尔ndarray
。选择(掩码、值、默认值='Unknown')@DevarshiGoswami添加了完整代码。你能核实一下吗?谢谢,我去看看如果我使用你的代码片段,我会得到这个错误<代码>类型错误:condlist中的无效条目0:在
df['Category']=np行中应为布尔ndarray
。选择(掩码、值、默认值='Unknown')@DevarshiGoswami添加了完整代码。你能核实一下吗?谢谢,我去看看DCA此实现是否可以区分大小写?例如,
Tech support
Tech support
将被归类为
support
,而不向字典添加其他项。@DevarshiGoswami是的,只需将
re.IGNORECASE
传递到
extract
,即
.str.extract(“…”,re.IGNORECASE)
。此实现是否区分大小写?也就是说,
技术支持
技术支持
将被归类为
支持
,而无需在字典中添加其他项。@DevarshiGoswami是的,只需将
re.IGNORECASE
传递到
提取
,即
.str.extract(“…”,re.IGNORECASE)