如何从Pandas DataFrame的产品字段中提取颜色信息
问题描述
我正在处理一个Pandas DataFrame,无法从产品字段中提取颜色信息,希望得到帮助。以下是数据集的产品列示例,我需要新增一列单独存储提取出的颜色,数据集中还有其他不同类型、不同颜色的产品。
示例输入数据
| -------------------Product------------------- |
|---|
| youth room (160x220 cm, Dark Grey) |
| Fur Rugs in White - 55x80 cm |
预期输出
| -------------------Product------------------- | -------- Color ------ |
|---|---|
| youth room (160x220 cm, Dark Grey) | Dark Grey |
| Fur Rugs in White - 55x80 cm | White |
解决方案
方法1:正则表达式提取(适配文本模式)
观察示例数据的规律,颜色要么出现在括号内的逗号之后,要么跟随在"in"关键词后。可以用正则匹配这两种场景:
import pandas as pd import re # 构建示例DataFrame data = { 'Product': [ 'youth room (160x220 cm, Dark Grey)', 'Fur Rugs in White - 55x80 cm' ] } df = pd.DataFrame(data) # 定义颜色提取函数 def extract_color(text): # 匹配括号内逗号后的颜色 bracket_match = re.search(r',\s*([A-Za-z\s]+)\)', text) if bracket_match: return bracket_match.group(1).strip() # 匹配"in "后的颜色(直到破折号前) in_match = re.search(r'in\s+([A-Za-z\s]+)\s*-', text) if in_match: return in_match.group(1).strip() # 无匹配时返回空值 return None # 新增Color列 df['Color'] = df['Product'].apply(extract_color) print(df)
运行结果:
Product Color 0 youth room (160x220 cm, Dark Grey) Dark Grey 1 Fur Rugs in White - 55x80 cm White
方法2:基于已知颜色列表匹配(准确率更高)
如果数据集中的颜色是固定的有限种类,可以预先定义颜色列表,通过模糊匹配提取:
import pandas as pd from fuzzywuzzy import process # 需先安装:pip install fuzzywuzzy python-Levenshtein # 自定义已知颜色列表 color_list = ['Dark Grey', 'White', 'Black', 'Blue', 'Red', 'Light Brown'] data = { 'Product': [ 'youth room (160x220 cm, Dark Grey)', 'Fur Rugs in White - 55x80 cm' ] } df = pd.DataFrame(data) # 匹配最相似的颜色(设置阈值避免误匹配) def match_color(text): match, score = process.extractOne(text, color_list) return match if score > 80 else None df['Color'] = df['Product'].apply(match_color) print(df)
这种方法适合颜色范围明确的场景,能有效避免正则误匹配问题。
内容的提问来源于stack exchange,提问作者Orhan Dağ
相关产品推荐
相关产品推荐

