python - 如何在字符串中搜索关键字,提取该字符串并将其放入新列中?
问题描述
我正在使用熊猫。这是我的df:
df = {'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5']}
我想搜索每个字符串值并仅提取产品类别,然后将提取的字符串值放在另一列(“类别”)中。您可能会注意到,产品名称没有正式的命名约定,因此 .split() 不适合使用。
最终结果应如下所示:
df = {'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5'], 'Category': ['Pegasus', 'Pegasus', 'Metcon', 'Metcon]}
我当前的代码是这样的,但出现错误:
def get_category(product):
if df['Product Name'].str.contains('Pegasus') or df['Product Name'].str.contains('Metcon'):
return product
df['Category'] = df['Product Name'].apply(lambda x: get_category(x))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
希望你能帮忙。谢谢!
解决方案
这个解决方案怎么样,当你有一个新类别时,你所要做的就是将新类别添加到猫数组中。
import pandas as pd
import numpy as np
df = pd.DataFrame({'Product Name': ['Nike Zoom Pegasus', 'All New Nike Zoom Pegasus 4', 'Metcon 3', 'Nike Metcon 5']})
cats = ["Pegasus","Metcon"]
df["Category"] = df["Product Name"].apply(lambda x: np.intersect1d(x.split(" "),cats)[0])
output
Product Name Category
0 Nike Zoom Pegasus Pegasus
1 All New Nike Zoom Pegasus 4 Pegasus
2 Metcon 3 Metcon
3 Nike Metcon 5 Metcon
推荐阅读
- matlab - 在MATLAB中的jpeg上放置一个模糊的圆圈?
- swift - CFString.self 是什么意思?
- elixir - 如何将流量从 Http 重定向到负载均衡器上用于 SSL 的 Phoenix Elixir 中的 Https?
- python - pytest 夹具传递值
- snmp - 在 snmpd.conf 中使用 Net-SNMP 扩展 PEN 后的 OID 对象
- java - 如何在纯 Java 中诱导触觉反馈
- javascript - 如何确保 Electron 窗口完全从内存中删除?
- angular - Chrome 调试器可以排除 node_modules 文件吗?
- javascript - 对使用 NextJS 和 Express 的 service worker 感到困惑
- python - 对 numpy 二维数组的两个维度使用数组索引