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
相关产品推荐
相关产品推荐

