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

为转置后的Pandas DataFrame插入空白行及报错排查

解决转置DataFrame后插入空白行的KeyError问题

错误原因分析

  • 变量名不匹配:转置后的变量是df_transposed,但原代码误用了未定义的transposed_df,直接触发变量未定义错误。
  • 索引名称错误:代码中使用total_accruals(eom)作为索引,但原DataFrame的列名是total_accruals,不存在该索引,导致KeyError。
  • 插入位置冗余:需求仅需两个插入位置,但原代码写了四个位置,逻辑冗余且易出错。

修正后的完整代码

import pandas as pd

df = pd.DataFrame(
    {
        'revenue_month': ['Jan', 'Feb', 'Mar'],
        'new_invoice_net': [1000, 2000, 3000],
        'new_accrual': [500, 1000, 1500],
        'tax': [100, 200, 300],
        'total_new_invoice_gross': [1500, 2500, 3500],
        'total_new_invoice_net': [1200, 2200, 3200],
        'reversal_of_accruals': [200, 400, 600],
        'new_revenue': [900, 1800, 2700],
        'net_revenue_in_period': [800, 1600, 2400],
        'change_in_net_revenue': [100, 200, 300],
        'total_accruals': [600, 1200, 1800],
        'settlement': [300, 600, 900],
        'account_revenue': [500, 1000, 1500],
    }
)

df_transposed = df.set_index('revenue_month').transpose()

# 确定两个需要插入空白行的位置:目标行的下一行
insert_positions = [
    df_transposed.index.get_loc('total_new_invoice_net') + 1,
    df_transposed.index.get_loc('change_in_net_revenue') + 1
]

# 倒序插入,避免插入后位置偏移影响后续操作
for pos in reversed(insert_positions):
    # 创建空白行,索引为空字符串,列与原表一致
    empty_row = pd.DataFrame(
        data=[[''] * len(df_transposed.columns)],
        index=[''],
        columns=df_transposed.columns
    )
    # 拼接原表前半部分、空白行、原表后半部分
    df_transposed = pd.concat([
        df_transposed.iloc[:pos],
        empty_row,
        df_transposed.iloc[pos:]
    ])

print(df_transposed)

关键修正说明

  1. 统一变量名:全程使用df_transposed,避免变量未定义问题。
  2. 修正索引逻辑:仅需获取目标行的位置+1,即可在目标行与下一行之间插入空白行,无需额外获取后续行的位置。
  3. 简化插入位置:只保留需求中明确的两个插入点,避免冗余操作。
  4. 倒序插入:插入空白行后,后续行的索引会向后偏移,倒序插入能保证每个位置的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:12:31