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

Pandas DataFrame中值的处理:修改grocery列的实现方案

解决DataFrame中grocery列的字符串处理问题

原代码语法错误修正

你提供的字典中字符串存在单引号嵌套问题,会触发语法报错,需将字符串改为双引号包裹(或转义内部单引号):

import pandas as pd

groceries = {
    'grocery':["Tesco's wafers", "Asda's shortbread", "Aldi's lemon tea", "Sainsbury's croissant", "Morrison's doughnut", "Amazon fresh's peppermint tea", "Bar becan's pizza", "Pound savers' shower gel"],
    'category':['biscuit', 'biscuit', 'tea', 'bakery', 'bakery', 'tea', 'bakery', 'hygiene'],
    'price':[0.99, 1.24, 1.89, 0.75, 0.50, 2.5, 4.99, 2]
}

df = pd.DataFrame(groceries)

核心问题解决思路

商家名称长度不固定(比如Amazon fresh是两个词),用空格分割无法精准提取商品名。观察数据格式可知,所有条目均遵循「商家名+'s 商品名」结构,因此可以's 作为分割符,直接拆分出后面的商品部分,再统一格式化首字母大写。

方法1:自定义函数+apply

def change(x):
    # 按's '分割,取后半部分商品名
    product_part = x.split("'s ")[1]
    # 将每个单词首字母大写
    return product_part.title()

# 对grocery列应用函数
df['grocery'] = df['grocery'].apply(change)
print(df)

方法2:Pandas字符串链式调用(更简洁)

无需自定义函数,直接用Pandas内置字符串方法处理:

df['grocery'] = df['grocery'].str.split("'s ").str[1].str.title()
print(df)

最终输出结果

两种方法都会生成你期望的DataFrame:

grocery category  price
0          Wafers   biscuit   0.99
1      Shortbread   biscuit   1.24
2       Lemon Tea       tea   1.89
3       Croissant    bakery   0.75
4        Doughnut    bakery   0.50
5  Peppermint Tea       tea   2.50
6           Pizza    bakery   4.99
7      Shower Gel    hygiene   2.00

补充说明

  • 原代码中change函数错误操作了整个df['grocery']列,而map/apply是对列内每个元素单独处理,函数参数x是单个字符串值,而非整列。
  • str.title()方法可自动将每个单词首字母大写,完美匹配需求格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:43