如何基于指定颜色列表将pandas dataframe的单列拆分为颜色和名称两列
实现方案
直接使用pandas原生的字符串提取方法即可实现需求,不需要手动转列表循环处理:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'object_Id': ['obj00', 'obj01', 'obj02', 'obj03'], 'object_detail': ['red mug', 'red bowl', 'green mug', 'white candle holder'] }) # 预定义颜色列表 COLOR = ['red', 'green', 'blue', 'white'] # 核心处理逻辑 color_pattern = '|'.join(COLOR) df[['object_color', 'name']] = df['object_detail'].str.extract(fr'^({color_pattern})\s*(.*)$') print(df)
运行后输出结果和你预期的完全一致:
object_Id object_detail object_color name 0 obj00 red mug red mug 1 obj01 red bowl red bowl 2 obj02 green mug green mug 3 obj03 white candle holder white candle holder
逻辑说明
- 先把预定义的颜色列表拼接成正则可选匹配串,示例中的COLOR拼接后结果为
red|green|blue|white - 正则
fr'^({color_pattern})\s*(.*)$'中,^匹配字符串开头,第一个分组匹配开头的有效颜色,\s*跳过颜色后面的空格,第二个分组匹配剩余的所有内容作为物品名 str.extract会按照正则中的分组顺序,把匹配到的内容依次返回为多列,直接赋值给DataFrame的两个新列即可- 如果存在
object_detail开头不是列表中颜色的情况,对应的object_color会返回NaN,你可以根据需要用fillna等方法后续处理异常值
内容的提问来源于stack exchange,提问作者Pranjal Doshi
相关产品推荐
相关产品推荐

