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

如何使用pandas将DataFrame的basket_items列拆分为产品与价格列

pandas拆分basket_items列实现方案

核心处理逻辑分四步:读取原始数据、拆分商品列表为独立行、从商品字符串尾部拆分商品名和价格、格式调整。
注意商品名本身包含-字符(比如带口味的拿铁),必须从字符串最后一个分隔符位置拆分,不能从左侧拆分,否则会截断商品名。

完整可运行代码

import pandas as pd
from io import StringIO

# --------------- 读取数据部分 ---------------
# 实际使用时替换成pd.read_csv("你的文件路径.csv")即可
demo_csv = """timestamp,store,customer_name,basket_items,total_price,cash_or_card,card_number
06/06/2022 09:00,Chesterfield,Stephanie Neyhart,"Large Flat white - 2.45, Large Flavoured iced latte - Vanilla - 3.25, Large Flavoured iced latte - Hazelnut - 3.25",8.95,CASH,
"""
df = pd.read_csv(StringIO(demo_csv))

# --------------- 核心拆分逻辑 ---------------
# 1. 按逗号拆分每个订单的购物车条目,清理条目前后空格
df["basket_items"] = df["basket_items"].str.split(", ").apply(lambda items: [i.strip() for i in items])
# 2. 把拆分后的商品列表展开,实现一行对应一个商品
df = df.explode("basket_items", ignore_index=True)
# 3. 从最右侧的" - "拆分,避免商品名内的横杠干扰,得到商品名和价格两列
df[["product", "price"]] = df["basket_items"].str.rsplit(" - ", n=1, expand=True)
# 4. 格式调整:价格转浮点类型,提取需要的列
df["price"] = df["price"].astype(float)
result = df[["product", "price"]]

运行结果

调用print(result)即可得到你需要的结构:

product  price
0                      Large Flat white   2.45
1   Large Flavoured iced latte - Vanilla   3.25
2  Large Flavoured iced latte - Hazelnut   3.25

注意事项

  • 如果需要保留订单关联的其他字段(如下单时间、门店、支付方式),在最后提取列时加上对应字段名即可,不需要只保留product和price两列。
  • 如果数据中存在basket_items为空的行,拆分前加一行df = df.dropna(subset=["basket_items"])过滤空值即可避免运行报错。
  • 不要把rsplit替换成普通的split:普通split默认从左拆分,会把带横杠的商品名拆错,比如Large Flavoured iced latte - Vanilla - 3.25会被错误拆成Large Flavoured iced latte和Vanilla - 3.25。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:27:23