You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何提取列表列指定前缀元素并转换字符串生成新列

解决方案

你已经完成了字符串列表转原生列表的步骤,后续只需要针对每行的列表做前缀匹配、字符串格式化即可,由于已知每行dr_md、dr_od前缀的元素各仅有一个,不需要额外处理多匹配、无匹配的复杂边界。

注意:执行转换前请确认列名拼写,原始数据列名为大写开头的Listed_Items,不要误写为小写导致KeyError。

完整实现代码

import pandas as pd

# 第一步:将字符串格式的列表转换为Python原生列表类型
df["Listed_Items"] = df["Listed_Items"].apply(eval)

# 方法1:自定义通用处理函数,可读性更强
def parse_drink(item_list, prefix):
    for item in item_list:
        if item.startswith(prefix):
            # 移除前缀 → 下划线替换为空格 → 单词首字母大写
            return item.removeprefix(prefix).replace("_", " ").title()
    return None

# 生成两个新列
df["MD"] = df["Listed_Items"].apply(lambda x: parse_drink(x, "dr_md_"))
df["OD"] = df["Listed_Items"].apply(lambda x: parse_drink(x, "dr_od_"))

# 提取需要的列得到最终结果
final_df = df[["Name", "MD", "OD"]]

如果你偏好更简洁的写法,也可以不用单独定义函数,直接用生成器表达式取匹配项处理,效果完全一致:

# 方法2:简洁单行写法
df["MD"] = df["Listed_Items"].apply(lambda x: next(i.removeprefix("dr_md_").replace("_", " ").title() for i in x if i.startswith("dr_md_")))
df["OD"] = df["Listed_Items"].apply(lambda x: next(i.removeprefix("dr_od_").replace("_", " ").title() for i in x if i.startswith("dr_od_")))
final_df = df[["Name", "MD", "OD"]]

最终输出结果

处理后得到的final_df完全匹配预期格式:

NameMDOD
TomCoca ColaWater
StevePepsiOrange Juice
PhilDr PepperCoffee

逻辑说明

  • 前缀匹配时补全末尾下划线,即匹配dr_md_而非dr_md,避免误匹配其他同开头的非目标元素
  • 用removeprefix()方法移除前缀比固定长度切片更稳妥,不会因为前缀长度计算错误导致字符串截断异常
  • Python原生的title()方法会自动将空格分隔的每个单词首字母转为大写,其余字母转小写,刚好符合格式化要求

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 22:33:10