pandas读取Excel时如何删除顶部多余日期表头行
问题原因
你用df.iloc[2:]删不掉最顶部带Date/Time:13/06/2022的行,核心原因是这行根本不属于DataFrame的数据行——pandas默认会把Excel的第一行识别为DataFrame的列名(表头),你切片操作只处理数据行,自然碰不到作为列名存在的这行内容。
推荐方案:读取文件时直接跳过冗余行
最省事的做法是不要等读完再清理,在read_excel阶段就指定正确的表头位置,一步读入干净数据:
import pandas as pd # 前3行是多余内容,第4行(索引从0开始计数为3)是真正的业务表头 df = pd.read_excel('output/tracker.xlsx', header=3)
如果担心冗余行识别不准,也可以显式指定跳过前3行,再把后续第一行设为表头:
df = pd.read_excel('output/tracker.xlsx', skiprows=3, header=0)
这个写法逻辑很明确:先跳过Excel最开头的3行无效内容,把接下来的第一行作为列名,剩余内容作为数据行加载,读出来的结果直接可用,不需要额外做行删除操作。
事后修复方案(已读入DataFrame的场景)
如果不想重新读取文件,也可以在现有DataFrame基础上做两步修正:
- 先把真正的表头行设置为新的列名
- 再删除前面所有无效数据行,重置索引
参考代码:
# 将索引为2的Site ID行设置为新列名 df.columns = df.iloc[2] # 删除前3行无效数据(索引0、1、2),重置索引 df = df.iloc[3:].reset_index(drop=True) # 可选清理:删除全为空值的无效列 df = df.dropna(axis=1, how='all')
提示:优先选择读取阶段处理的方案,比事后清理效率更高,也不容易出现行号计数错误、列名不匹配的问题。
内容的提问来源于stack exchange,提问作者DiskoSuperStar
相关产品推荐
相关产品推荐

