Python使用pandas处理CSV数据集拆分Items列分组报错如何解决
问题解决代码及说明
核心问题原因
- 你执行
df['Items'].str.split(',', expand=True)后没有将拆分生成的列赋值回原DataFrame,原数据中不存在Items0~Items5列,后续分组操作逻辑不符合需求 groupby().size()是统计分组频次的接口,和你需要的「固定商品对应固定列」的结构化输出需求完全不匹配
调整后代码
import pandas as pd # 读取源文件 df = pd.read_excel('filepath') # 第一步:提取所有唯一商品,确定固定列对应的商品顺序,匹配你需要的Items0~Items5共6列 all_items = set() df['Items'].str.split(',').apply(lambda x: [all_items.add(i.strip()) for i in x]) # 可自定义排序规则,默认按字符顺序排列,取前6个对应6列 fixed_items = sorted(all_items)[:6] col_names = [f'Items{i}' for i in range(6)] # 第二步:逐行匹配对应位置的商品 def match_fixed_items(row_items): row_item_set = set([i.strip() for i in row_items.split(',')]) # 按固定商品顺序返回,存在则返回商品名,不存在返回空值 return [item if item in row_item_set else '' for item in fixed_items] # 生成拆分列并拼接原有姓名、日期列 item_cols = df['Items'].apply(match_fixed_items).apply(pd.Series) item_cols.columns = col_names result_df = pd.concat([df[['Name', 'Date']], item_cols], axis=1) # 输出结构化结果 print(result_df)
效果说明
Items0~Items5列对应固定商品,列顺序不会随每行拆分的商品顺序变化- 每行对应列包含该商品则填入商品名,不包含则留空,完整保留原有Name、Date信息
- 自动处理商品名前后多余空格,避免匹配错误
内容的提问来源于stack exchange,提问作者student911
相关产品推荐
相关产品推荐

