You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas中skiprows参数为何在header不变时影响DataFrame表头?

为什么Pandas v0.19.2中同时设置headerskiprows会改变表头?

这是Pandas 0.19.x旧版本里一个容易踩坑的参数逻辑问题,和新版本的行为不一样,我来给你拆解清楚:

核心原因:旧版本中header的计数是在skiprows之后的

  • 当你只写header=9时,Pandas是从原始文件的第0行开始数,把第9行当作表头,同时自动跳过它前面的9行(因为表头行之前的内容不属于数据),这时候你的读取逻辑是对的。
  • 但一旦加上skiprows=8,Pandas会先跳过前8行,然后从剩下的行里再数第9行作为表头——相当于从原始文件的第8+9=17行开始当表头,读取到的自然是完全错误的内容。

解决办法

你有两种选择:

  1. 直接去掉skiprows参数header本身就会跳过它之前的所有行,不需要额外用skiprows重复操作,保持你最初的代码就可以正常工作:
import numpy as np
import pandas as pd
def answer_one():
    energy = pd.read_excel(io = "Energy Indicators.xls", header = 9, parse_cols = "C:F", skip_footer = 38)
    return energy
answer_one()
  1. 如果必须用skiprows,调整header的数值:假设你要跳过前8行,然后把原始文件的第9行作为表头,那么跳过8行后,剩下的第一行就是目标表头,所以header要设为1
def answer_one():
    energy = pd.read_excel(io = "Energy Indicators.xls", header = 1, parse_cols = "C:F", skip_footer = 38, skiprows = 8)
    return energy

补充说明

这个反直觉的逻辑在Pandas 0.20及以后的版本中已经被修复了——新版本里header的计数会基于原始文件的行号,不再受skiprows影响,但你用的v0.19.2还遵循旧规则,所以才会出现这个问题。

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

火山引擎 最新活动