python - 搜索特定文本集的列,如果找到文本,则在新列中输入新的文本字符串 pandas
问题描述
我正在尝试查找在我的数据框中的任何列中出现“gas”、“diesel”或“ev”一词的实例(不区分大小写)。如果在列中找到这些单词的任何版本,我想在名为“FUEL”的新列中输入燃料类型的缩写。
excerpt of my dataframe
SUMN SOUN MATN
Light duty vehicle Diesel Tire wear Rubber
Heavy duty diesel Non-catalyst Diesel
Light duty truck catalyst Gasoline
Medium duty vehicle EV brake wear brakes
What I'm hoping to output
SUMN SOUN MATN FUEL
Light duty vehicle Diesel Tire wear Rubber DSL
Heavy duty diesel Non-catalyst Diesel DSL
Light duty truck catalyst Gasoline GAS
Medium duty vehicle EV brake wear brakes ELEC
我该如何做到这一点?
我已经开始能够查看一种类型的字符串的一列,但是对于如何超越这一点感到困惑。
df['FUEL'] = df['SUMN'].str.contains('diesel', case=False)
解决方案
这是一种使用apply
withstr.contains
检查每个单词的所有列的方法。最后,我们将单词映射到正确的单词,例如ev -> ELECT
。
请注意,我?i
在我的正则表达式中使用,这使得它不区分大小写:
words = ['gas', 'diesel', 'ev']
mapping = {'gas':'GAS', 'diesel':'DSL', 'ev':'ELEC'}
for word in words:
m = df.apply(lambda x: x.str.contains(f'(?i)({word})')).any(axis=1)
df.loc[m, 'FUEL'] = mapping[word]
输出
SUMN SOUN MATN FUEL
0 Light duty vehicle Diesel Tire wear Rubber DSL
1 Heavy duty diesel Non-catalyst Diesel DSL
2 Light duty truck catalyst Gasoline GAS
3 Medium duty vehicle EV brake wear brakes ELEC
推荐阅读
- python - 在函数中返回 2 个值
- android-studio - Flutter 中的 Getter/Setter 使用 Android Studio
- c# - Automapper 禁用 IgnoreMap 属性一次
- javascript - 使用不同的 API 在 (amazon) lex bot (nodejs) 上记录
- python - 通过滚动在树视图中搜索
- javascript - 旋转图表“饼图”以需要值或角度
- java - 覆盖equals方法不能在hashmap中使用对象作为键?
- mysql - mysql,选择min表达式的源值而不是最小值
- javascript - linear-gradient() 值作为 js 变量
- java - 在java中,我如何打印以下模式