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

如何删除DataFrame中Day1至Day5列含NaN的行?df.dropna代码报错求助

解决pandas dropna无法运行的问题

嘿,我来帮你排查下问题所在,你的代码里有两个关键问题需要调整:

1. subset参数的写法错误

你在subset里用了['Day 1':'Day 5']这种切片语法,但列表是不支持这种写法的!subset需要接收列名的列表,所以你得把这些列名明确列出来,或者用其他方式动态获取这几列。

2. how参数可能不符合你的需求

你写的how='all'是指只有当Day1到Day5这几列全是NaN的时候才删除该行,但你的需求是删除“包含NaN的行”——也就是只要这些列里有任意一个NaN就删掉,这时候应该把how改成'any'。如果你的真实需求就是删除全为NaN的行,那可以保留how='all',但还是要修正subset的写法。

正确的代码示例

这里给你几种可行的写法:

方法一:直接列出所有目标列名

这种方式最直观,适合列数不多的情况:

df.dropna(axis=0, how='any', subset=['Day 1', 'Day 2', 'Day 3', 'Day 4', 'Day 5'], inplace=True)

方法二:动态匹配列名(适合列名有规律的场景)

如果后续可能增加Day6、Day7这类列,用这种方式更灵活:

# 筛选出所有以"Day"开头的列
day_columns = [col for col in df.columns if col.startswith('Day')]
df.dropna(axis=0, how='any', subset=day_columns, inplace=True)

方法三:通过列的位置切片获取

如果Day列的位置固定在ID和Region之后(也就是从第3列开始,索引为2),可以用位置切片:

# 取索引2到7的列(左闭右开,刚好包含Day1到Day5)
day_columns = df.columns[2:7]
df.dropna(axis=0, how='any', subset=day_columns, inplace=True)

参数说明

  • axis=0:指定按行删除(默认就是0,其实可以省略)
  • how='any':只要subset里的列有任意一个NaN就删除该行;如果要删除全为NaN的行,改成how='all'即可
  • subset:限定只检查这些列的NaN值,不影响其他列
  • inplace=True:直接修改原DataFrame,不需要重新赋值给df

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:08:18