You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用read_csv时skiprows参数失效输出NaN值无法读取指定行

问题根因

你出现NaN的核心原因有两个:

  1. 调用pd.DataFrame(data, columns=['Name', 'Bid', 'Ask'])重新构造DataFrame时,如果read_csv读取到的列名和你手动指定的列名不完全匹配,或者读取到的行没有对应列的值,就会生成空值填充为NaN
  2. skiprows参数设置不合理,没有精准过滤到你需要的目标行,导致读取了很多无用的空行/不匹配行

解决方案

pandas的skiprows参数支持传入自定义过滤规则,你可以直接指定仅保留需要的行,同时读文件时直接指定需要的列,不需要二次构造DataFrame:

调整后代码

import pandas as pd

# 行号计数说明:read_csv默认把CSV文件第一行记为x=0,第二行x=1,以此类推
# 下面的lambda规则表示:保留表头行(x=0),仅保留目标数据行
data = pd.read_csv(
    'C:\\Users\\Michael\\Desktop\\Tradition_Basis_RFR_2021_12_05_15_00_00.csv',
    header=0,
    usecols=['Name', 'Bid', 'Ask'], # 只读需要的三列,避免多余数据
    skiprows=lambda x: x != 0 and x not in [14,15,16,17,18,20,21,22,23] # 按你需要的行对应调整列表里的数值即可
)
data['Mid_value'] = data['Bid']/2 + data['Ask']/2
print(data)

可选写法(手动生成跳过行列表)

如果不习惯用lambda表达式,也可以手动生成要跳过的行号列表:

import pandas as pd

# 跳过1-14行(对应CSV行号2到14)、第20行(对应CSV行号21)、25行及以后的所有行
skip_rows = list(range(1,14)) + [19] + list(range(24, 1000)) # 1000设为大于你CSV总行数的数值即可
data = pd.read_csv(
    'C:\\Users\\Michael\\Desktop\\Tradition_Basis_RFR_2021_12_05_15_00_00.csv',
    header=0,
    usecols=['Name', 'Bid', 'Ask'],
    skiprows=skip_rows
)
data['Mid_value'] = data['Bid']/2 + data['Ask']/2
print(data)

参数调整说明

如果上面的行号和你实际CSV的行号匹配不上,你可以先不加skiprows和usecols读取完整CSV,打印data.index和data.columns确认行号、列名后再调整过滤规则即可。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:45:00