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)
。