如何删除Pandas DataFrame中列索引2至末列全为NaN的行?
问题
需要删除Pandas DataFrame中从列索引2到最后一列全部为NaN的行。
示例初始化代码:
import pandas as pd import numpy as np df = pd.DataFrame() df['index'] = [1, 2, 3, 4,5] df['buy'] = [ 10, 2, 6, 7,8] df['val1'] = [1, 2, np.nan, 8, np.nan] df['val2'] = [10, np.nan, np.nan, 28, np.nan] df['val3'] = [11, 32, np.nan, 18, np.nan]
原始DataFrame:
index buy val1 val2 val3 0 1 10 1.0 10.0 11.0 1 2 2 2.0 NaN 32.0 2 3 6 NaN NaN NaN 3 4 7 8.0 28.0 18.0 4 5 8 NaN NaN NaN
期望输出:
index buy val1 val2 val3 0 1 10 1.0 10.0 11.0 1 2 2 2.0 NaN 32.0 3 4 7 8.0 28.0 18.0
解决方案
通过布尔索引直接筛选目标行即可:
# 保留列索引2到末尾不全为NaN的行 filtered_df = df[~df.iloc[:, 2:].isna().all(axis=1)] print(filtered_df)
代码说明
df.iloc[:, 2:]:选中所有行,以及从第3列(索引2)到最后一列的所有列.isna().all(axis=1):逐行检查选中列是否全部为NaN,返回布尔Series,True代表该行需要被删除~:对布尔结果取反,保留符合要求的行
内容的提问来源于stack exchange,提问作者White cow
相关产品推荐
相关产品推荐

