大家好,本文记录的是一个知识点:如何锁定Pandas中缺失值所在的行,介绍5个方法。
数据
import pandas as pd
import numpy as np
df = pd.DataFrame({
"A":list(range(1,11)),
"B":list(range(11,21)),
"C":list(range(21,31)),
"D":list(range(31,41))
})
df
设置空值
df.iloc[2,0] = np.nan
df.iloc[3,1] = np.nan
df.iloc[3,2] = np.nan
df.iloc[5,2] = np.nan
df.iloc[9,1] = np.nan
df
统计空值个数
# 统计每列下空值的个数
df.isnull().sum()
A 1
B 2
C 2
D 0
dtype: int64
技术提升
文中详细代码、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
方式①、添加微信号:dkl88191,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
确定空值所在行
方法1
# 1、每个位置是否为空
df.isnull()
# 2、转置供能
df.isnull().T
# 3、any表示至少有一个空值
df.isnull().T.any()
0 False
1 False
2 True
3 True
4 False
5 True
6 False
7 False
8 False
9 True
dtype: bool
# 4、确定空值的行
df[df.isnull().T.any()]
方法2
df1 = df.isnull()
df1
新生成一个列E,是前面4个列的求和。求和的时候只要出现一个True,则为True
df1["E"] = df1["A"] + df1["B"] + df1["C"] + df1["D"]
df1
# 把df1["E"]列传进来
df[df1["E"]]
方法3
df.isnull().values==True
array([[False, False, False, False],
[False, False, False, False],
[ True, False, False, False],
[False, True, True, False],
[False, False, False, False],
[False, False, True, False],
[False, False, False, False],
[False, False, False, False],
[False, False, False, False],
[False, True, False, False]])
df[df.isnull().values==True]
可以看到结果中出现了重复的行,这个因为第4行中有2个缺失值,需要去重:
# 删除重复值
df[df.isnull().values==True].drop_duplicates()
方法4
# 每个位置判断【不是空值-notnull】
pd.notnull(df)
df[~pd.notnull(df).all(axis=1)] # 执行取反操作
# notnull 和 notna 等效
df[~pd.notna(df).all(axis=1)]
方法5
# 统计每个位置是否为空
df.isnull()
# 按照行统计:只要存在一个空值即为True
(df.isnull()).any(axis=1)
0 False
1 False
2 True
3 True
4 False
5 True
6 False
7 False
8 False
9 True
dtype: bool
df[(df.isnull()).any(axis=1)]