首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python/Pandas:如果行中的另一个字段包含字符串中的条件,则更新同一行中的字段

Python/Pandas:如果行中的另一个字段包含字符串中的条件,则更新同一行中的字段
EN

Stack Overflow用户
提问于 2022-04-13 11:26:43
回答 1查看 33关注 0票数 1

我有一个五个汽车品牌的名单(宝马,福特,保时捷,斯柯达,马自达)的数据在我的数据将只来自这五个品牌之一。

模型列将始终包含“品牌”,但有时未填充“品牌”列。是否有一种基于包含所需字符串的模型来更新品牌的方法。模型也可能并不总是在字符串的开头。

我的数据:

代码语言:javascript
复制
  Brand    Model
0 nan      Mazda CX-5
1 BMW      BMW X5
2 BMW      BMW 2 Series
3 Ford     Ford Focus
4 Porsche  Porsche Cayenne
5 Skoda    Skoda Octavia
6 nan      911 Porsche
7 nan      8 Series BMW

我想要的Dataframe

代码语言:javascript
复制
  Brand    Model
0 Mazda    Mazda CX-5
1 BMW      BMW X5
2 BMW      BMW 2 Series
3 Ford     Ford Focus
4 Porsche  Porsche Cayenne
5 Skoda    Skoda Octavia
6 Porsche  911 Porsche
7 BMW      8 Series BMW
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-13 11:29:06

您可以使用regex提取第一个单词(只有字母)和fillna

代码语言:javascript
复制
df['Brand'] = df['Brand'].fillna(df['Model'].str.extract('([a-zA-Z]+)',
                                                         expand=False))

产出:

代码语言:javascript
复制
     Brand            Model
0    Mazda       Mazda CX-5
1      BMW           BMW X5
2      BMW     BMW 2 Series
3     Ford       Ford Focus
4  Porsche  Porsche Cayenne
5    Skoda    Skoda Octavia
6  Porsche      911 Porsche

注意:如果品牌名称并不总是第一个字母唯一的单词,你需要提供更多的细节,如何识别它。

使用已知的品牌列表

代码语言:javascript
复制
brands = ['BMW', 'Ford', 'Porsche', 'Skoda', 'Mazda']
regex = '(%s)' % '|'.join(brands)
df['Brand'] = df['Brand'].fillna(df['Model'].str.extract(regex, expand=False))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71856709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档