如何打印数据中NaN缺失值对应的行与列位置
如何打印DataFrame中NaN缺失值对应的行号与列号
你提供的参考代码存在两处可优化/修正的点:
- 硬编码了行、列遍历范围,仅适用于19行5列的特定DataFrame,通用性差
- 用
== 'NaN'判断缺失值逻辑错误:pandas中的缺失值np.nan是浮点类型,不等于字符串'NaN',且np.nan本身不满足等于自身的逻辑,必须用专门的缺失值判断函数识别
方案1:修正后的嵌套循环方案
适合小尺寸DataFrame使用,逻辑和你原本的写法一致:
import pandas as pd # 动态获取DataFrame的行数、列数 rows, cols = df.shape for i in range(rows): for j in range(cols): # 用pd.isna判断是否为缺失值,兼容np.nan、NaT等多种pandas缺失值类型 if pd.isna(df.iloc[i,j]): print('Missing Value at (row,col): ({}, {}) '.format(i,j))
方案2:高效向量化方案
适合大尺寸DataFrame使用,避免嵌套循环带来的性能损耗:
import pandas as pd import numpy as np # 一次性返回所有缺失值对应的行索引数组、列索引数组 nan_row_indexes, nan_col_indexes = np.where(df.isna()) # 遍历打印所有缺失值位置 for row, col in zip(nan_row_indexes, nan_col_indexes): print('Missing Value at (row,col): ({}, {}) '.format(row, col))
注意事项
- 上述代码输出的行号、列号默认是0起始的索引值,如果需要匹配Excel等工具1起始的计数规则,打印时将行、列值各加1即可
- 如果你只需要统计缺失值数量不需要逐个打印位置,直接使用
df.isna().sum().sum()即可快速得到全表缺失值总数
内容的提问来源于stack exchange,提问作者Jacqueline Neo
相关产品推荐
相关产品推荐

