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

如何删除pandas DataFrame中指定行后存在缺失值的列

删除pandas DataFrame中第n行后存在缺失值的列

假设你的DataFrame名为df,注意pandas默认使用0起始索引(即第一行索引为0)。如果你的需求是基于日常1-based的行号,记得把行号减1后传入代码。

核心思路

  1. 选取第n行之后的所有行(不包含第n行);
  2. 检查这些行中每一列是否存在缺失值;
  3. 保留那些在第n行之后完全没有缺失值的列。

代码实现

# 定义目标行号(0-based)
n = 2  # 示例:保留第2行之后无缺失的列

# 筛选符合条件的列
filtered_df = df.loc[:, ~df.iloc[n+1:].isna().any(axis=0)]

代码解释

  • df.iloc[n+1:]:提取第n行之后的所有行(索引大于n的行);
  • .isna():将数据转换为布尔矩阵,缺失值标记为True;
  • .any(axis=0):按列判断是否存在至少一个缺失值(返回布尔Series,True表示该列在目标区间有缺失);
  • ~:对布尔值取反,得到目标区间无缺失的列;
  • df.loc[:, ...]:保留这些符合条件的列。

示例验证

import pandas as pd
import numpy as np

# 创建测试DataFrame
df = pd.DataFrame({
    'col1': [1, 2, 3, 4, np.nan],
    'col2': [5, 6, 7, 8, 9],
    'col3': [10, 11, np.nan, 13, 14],
    'col4': [15, 16, 17, np.nan, 19]
})

# 选取第1行(0-based)之后无缺失的列
n = 1
filtered_df = df.loc[:, ~df.iloc[n+1:].isna().any(axis=0)]
print(filtered_df)

输出结果:

col2
0     5
1     6
2     7
3     8
4     9

在这个例子中,col1在第4行(索引4)有缺失,col3在第2行(索引2)有缺失,col4在第3行(索引3)有缺失,只有col2在第1行之后无缺失,因此被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:41:10