前言
如何判断pandas.DataFrame、Series是否包含缺失值NaN以及如何处理缺失值NaN。
Part.1
isnull() 函数
使用 isnull()、isna() 确定每个元素的缺失值 如果值为 NaN,则值为 True,如果不是,则值为 False。
读取数据集
panel_data = pd.read_csv("panel.bed", sep="\t")
panel_data:
Chrom Start End Gene Exon
0 chr1 115252169 115252369.0 NRAS NaN
1 chr1 115256380 115256619.0 NRAS NaN
2 chr1 11168333 NaN MTOR NaN
print(panel_data.isnull())
Chrom Start End Gene Exon
0 False False False False True
1 False False False False True
2 False False True False True
Part.2
all() 函数
配合isnull() 函数, 判断每一行/列的所有元素是否缺失值。
默认情况下为列,参数为 axis=1 的行。
print(panel_data.isnull().all())
Chrom False
Start False
End False
Gene False
Exon True
dtype: bool
print(panel_data.isnull().all(axis=1))
0 False
1 False
2 False
dtype: bool
Part.3
any() 函数
配合isnull() 函数, 判断每一行/列是否至少包含一个缺失值
print(panel_data.isnull().any())
Chrom False
Start False
End True
Gene False
Exon True
dtype: bool
如何处理缺失值
Part.4
fillna() 函数
fillna() 函数用来填补数据中的空缺值。
fillna(
value# 固定值填充
,method# ‘ffill’ 用前一个非空缺值填充;‘bfill’ 用后一个非空缺值填充
axis# ‘index’:按行填充;'columns’按列填充,默认为0
inplace # 是否用新生成的列表替换原列表
)
4.1 填补特定值
print(panel_data.fillna("NA"))
Chrom Start End Gene Exon
0 chr1 115252169 115252369.0 NRAS NA
1 chr1 115256380 115256619.0 NRAS NA
2 chr1 11168333 NA MTOR NA
4.2 按列填写不同特定值
print(panel_data.fillna({'END':"NA", 'Exon': 'exonNA'}))
Chrom Start End Gene Exon
0 chr1 115252169 115252369.0 NRAS exonNA
1 chr1 115256380 115256619.0 NRAS exonNA
2 chr1 11168333 NaN MTOR exonNA
Part.5
dropna() 函数
dropna() 函数删除所有包含NaN的行或列
dropna(
axis=0,# 默认axis=0。0为按行删除,1为按列删除
how=’any’,# 默认 ‘any’。‘any’指带缺失值的所有行/列;'all’指清除一整行/列都是缺失值的行/列
thresh=None,# int,保留含有int个非nan值的行
subset=None,# 删除特定列中包含缺失值的行或列
inplace=False# 默认False,True表示直接在原数据上更改
)
5.1 删除所有包含NaN的行,相当于参数全部默认
panel_data=panel_data.dropna()
panel_data=panel_data.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)
Empty DataFrame
Columns: [Chrom, Start, End, Gene, Exon]
Index: []
5.2 删除一整列都是NaN的列
panel_data=panel_data.dropna(axis=1,how='all')
Chrom Start End Gene
0 chr1 115252169 115252369.0 NRAS
1 chr1 115256380 115256619.0 NRAS
2 chr1 11168333 NaN MTOR
5.3 删除列'End'中包含nan的行,字符串要加引号
panel_data=panel_data.dropna(subset=['End'])
Chrom Start End Gene Exon
0 chr1 115252169 115252369.0 NRAS NaN
1 chr1 115256380 115256619.0 NRAS NaN
更多完整内容请阅读原文:6.python高频函数-处理缺失值isnull()、fillna()、dropna() (qq.com)https://mp.weixin.qq.com/s?__biz=MzIyMTI1NDU0Ng==&mid=2247484967&idx=2&sn=655baecb03c91e5b9ab39522220d5f6a&chksm=e83ec0dadf4949cc350c5c399a3ca33fd142a4b00a5c90924f20583f9ccfc857666f7d979cbb&token=1506943647&lang=zh_CN#rd