如何使用Python在Dataframe开头添加多行空行并下移列名
实现方案
需求说明
目标为在已有数据的Pandas DataFrame起始位置插入n个空行,原列名同步下移到第n行位置,空行后依次排列列名、原始数据。
示例原始DataFrame参数:
- 列字段:Col1、col2、col3、col4
- 原始数据行:共2行,值分别为
['One','Two','Three','four']、[2,4,5,8]
分场景实现
场景1:需要修改DataFrame本身结构
使用Pandas原生的concat方法实现,避免逐行拼接的低性能问题,同时不会触发数据类型异常:
import pandas as pd import numpy as np # 构造示例原始DataFrame origin_df = pd.DataFrame( data=[ ['One','Two','Three','four'], [2,4,5,8] ], columns=['Col1','col2','col3','col4'] ) def add_leading_blank(origin_df: pd.DataFrame, blank_num: int) -> pd.DataFrame: # 生成指定数量的空行,列结构和原表完全一致 blank_part = pd.DataFrame( [[np.nan] * origin_df.shape[1]] * blank_num, columns=origin_df.columns ) # 把原列名转为数据行 col_row = pd.DataFrame([origin_df.columns.tolist()], columns=origin_df.columns) # 按顺序拼接:空行 -> 列名行 -> 原始数据 final_df = pd.concat([blank_part, col_row, origin_df], ignore_index=True) # 清除默认列名(列名已经放到数据行中),如果需要保留默认列名可删除这行 final_df.columns = [''] * origin_df.shape[1] return final_df # 调用示例:开头插入3个空行 result = add_leading_blank(origin_df, blank_num=3)
上述代码执行后,生成的DataFrame前3行为全空值,第4行为原列名,后续为原始数据,和预期效果完全一致。
场景2:仅导出文件时需要顶部留空
如果需求是导出Excel/CSV时顶部预留n个空行、列名从第n行开始展示,不需要修改DataFrame本身结构,直接在导出时指定起始行参数即可,性能最优:
# 导出Excel时直接指定从第n行开始写表,前n行自动留空 origin_df.to_excel("result.xlsx", startrow=3, index=False)
注意事项
- 禁止使用循环逐行
append的方式实现,数据量较大时性能会出现明显下降,pd.concat为向量化操作,执行效率比循环高两个数量级以上 - 空值统一使用
np.nan填充,不会和原有字符串、数值类型产生冲突,避免后续数据处理出现类型报错 - 如果不需要完全清除结果的列名,可以根据实际业务需求调整
final_df.columns的赋值逻辑
内容的提问来源于stack exchange,提问作者Rahul Anand
相关产品推荐
相关产品推荐

