为转置后的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)
关键修正说明
- 统一变量名:全程使用
df_transposed,避免变量未定义问题。 - 修正索引逻辑:仅需获取目标行的位置+1,即可在目标行与下一行之间插入空白行,无需额外获取后续行的位置。
- 简化插入位置:只保留需求中明确的两个插入点,避免冗余操作。
- 倒序插入:插入空白行后,后续行的索引会向后偏移,倒序插入能保证每个位置的准确性。
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

