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

如何将Excel Elements工作表数据解析为指定格式的Pandas DataFrame

解决方案

你的代码报错核心原因是:分组后得到的helper_df保留了原始数据表的全局索引,你提取到的主项行索引是全局位置,不是分组内的相对位置,导致np.split切割位置完全错误,最终子项列表长度和删除主项后的Value列长度不匹配。

以下是可直接运行的修改后代码,支持全部分类数据处理:

import pandas as pd
import numpy as np

# 直接读取Elements工作表数据
df = pd.read_excel('elements.xlsx', sheet_name='Elements', engine='openpyxl')

categ_group = ['TRANSPORT', 'ACCOMODATION', 'DELIVERY']
all_result = []

def create_category_df(group_df):
    # 先重置组内索引,保证索引是分组内从0开始的相对位置
    helper_df = group_df.reset_index(drop=True)
    # 获取主项在组内的索引位置
    item_index = helper_df[helper_df["Item"].isin(categ_group)].index.to_list()
    # 切割Item列,拆分主项和对应子项
    item_data = np.split(helper_df['Item'].to_numpy(), item_index)
    # 删除主项行,保留子项的Value数据
    helper_df = helper_df.drop(helper_df.index[item_index]).reset_index(drop=True)

    elements = []
    parent_items = []
    for item_block in item_data:
        if item_block.size == 0:
            continue
        # 每个块第一个元素是主项,后面的是对应子项
        parent_item = item_block[0]
        child_items = item_block[1:]
        elements.extend(child_items)
        parent_items.extend([parent_item]*len(child_items))
    
    # 生成分组处理结果
    group_result = pd.DataFrame({
        "Element": elements,
        "Item": parent_items,
        "Category": group_df["Category"].iloc[0],
        "Value": helper_df["Value"].values
    })
    return group_result

# 按Category分组遍历处理所有分类
for _, group in df.groupby("Category"):
    all_result.append(create_category_df(group))

# 合并所有分组结果
final_df = pd.concat(all_result, ignore_index=True)
print(final_df.to_string())

关键修改说明

  • 调整数据读取逻辑,直接获取工作表的原始DataFrame,避免操作复杂的嵌套groupby对象
  • 分组处理第一步先重置组内索引,确保主项定位、数组切割逻辑完全基于组内相对位置,不会出现跨分组的索引错位
  • 统一遍历所有Category分组,最后合并结果,无需单独调用指定分类的处理函数
  • 替换已废弃的DataFrame.append方法为pd.concat,兼容pandas 2.0+版本

运行代码后你将得到包含A、B、C三个分类所有子项的完整结果,输出格式和你要求的示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:27:01