如何使用Polars读取Excel文件,跳过前3行并将新首行设为表头
如何使用Polars读取Excel文件,跳过前3行并将新首行设为表头
嘿,我来帮你搞定这个需求!要实现跳过Excel前3行、把第4行设为表头的操作,Polars提供了很灵活的处理方式,咱们一步步来:
首先,读取文件的时候,得告诉Polars不要自动识别表头,让它把所有行都当成数据行来加载:
import polars as pl # 读取Excel,关闭自动表头识别 df_raw = pl.read_excel(file_path, sheet_name=0, has_header=False)
这时候所有列的名称都是默认的column_0、column_1这类,原Excel的每一行都会被当作数据保留下来。接下来咱们要完成两个核心操作:提取目标表头行,然后截取实际数据:
# 获取原Excel第3行(Polars索引从0开始,对应索引2)作为新表头 new_headers = df_raw.row(2) # 跳过前3行,从第4行(索引3)开始截取实际数据 df_data = df_raw.slice(3) # 将默认列名替换为新表头 df_final = df_data.rename(dict(zip(df_data.columns, new_headers)))
如果你习惯用链式写法让代码更紧凑,也可以把这些步骤合并成一行:
df_final = ( pl.read_excel(file_path, sheet_name=0, has_header=False) .pipe(lambda df: df.slice(3).rename(dict(zip(df.columns, df.row(2))))) )
另外要提醒你:如果新表头里有重复的名称,Polars会自动给重复列名加上_1、_2这类后缀来避免冲突。要是你想手动处理重复列名,可以用Polars的字符串方法来确保列名唯一:
from polars import Series # 处理重复表头,生成唯一列名 new_headers = Series(df_raw.row(2)).str.make_unique().to_list() df_final = df_data.rename(dict(zip(df_data.columns, new_headers)))
这样处理后,你得到的DataFrame就完全符合需求了——跳过了前3行无用内容,把第4行作为正式表头,后面都是干净的业务数据!
备注:内容来源于stack exchange,提问作者Horseman




