如何用pandas关联Excel读取的层级分类与对应商品及价格数据
实现分类与商品关联的解决方案
1. 修正Excel读取逻辑
你之前调用pd.read_excel时传入了列表类型的sheet_name参数,会返回「工作表名: 对应DataFrame」的字典,无法直接按DataFrame逻辑操作,先修正读取逻辑:
import pandas as pd # 直接读取指定工作表,得到二维表结构的DataFrame df = pd.read_excel('items.xlsx', sheet_name='itemSheet', engine='openpyxl')
2. 建立分类与商品的关联
你的数据里分类行的Item列带**标识,且每个分类对应唯一的Category编号,我们可以先提取分类和编号的映射,再给所有商品行打分类标签:
# 构建「分类编号: 分类名」的映射字典 category_mapping = {} for _, row in df.iterrows(): item_val = str(row['Item']).strip() # 识别分类行(两端带**) if item_val.startswith('**') and item_val.endswith('**'): cate_name = item_val.strip('*') cate_code = row['Category'] category_mapping[cate_code] = cate_name # 给所有行新增所属分类列 df['所属分类'] = df['Category'].map(category_mapping) # 过滤掉分类行,只保留商品数据 product_df = df[~df['Item'].str.startswith('**', na=False)].reset_index(drop=True)
3. 按分类提取商品数据
单个分类提取
# 提取Electronics分类下的所有商品及价格 electronics_data = product_df[product_df['所属分类'] == 'Electronics'][['Item', 'Price']] print(electronics_data) # 提取HouseItems分类下的所有商品及价格 house_items_data = product_df[product_df['所属分类'] == 'HouseItems'][['Item', 'Price']] print(house_items_data)
全部分类批量分组存储
如果分类数量多,可以直接分组存为字典,后续按需取用:
# 键为分类名,值为对应分类下的所有商品DataFrame category_product_dict = dict(tuple(product_df.groupby('所属分类'))) # 示例:直接取Electronics分类数据 print(category_product_dict['Electronics'])
原有代码问题说明
- 读取Excel的参数使用错误,得到的是字典而非DataFrame,后续操作会报错
- 没有建立分类编号和分类名的映射关系,无法把分类名关联到对应的商品行
pd.Series.add()是数值相加的方法,不是给Series追加元素的方法,不符合需求
内容的提问来源于stack exchange,提问作者Ian Kurtis
相关产品推荐
相关产品推荐

