如何删除pandas DataFrame中指定行后存在缺失值的列
删除pandas DataFrame中第n行后存在缺失值的列
假设你的DataFrame名为df,注意pandas默认使用0起始索引(即第一行索引为0)。如果你的需求是基于日常1-based的行号,记得把行号减1后传入代码。
核心思路
- 选取第n行之后的所有行(不包含第n行);
- 检查这些行中每一列是否存在缺失值;
- 保留那些在第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
相关产品推荐
相关产品推荐

