目录
1. 源数据
dic = {
"course": ['Java', 'Python', 'PHP', 'C'],
"score": [11, 22, np.nan, 44]
}
df = pd.DataFrame(dic)
2.pd.isnull()【检测是否存在缺失值】
# True:NaN False:~NaN
pd.isnull(df)
3.pd.notnull()【检测是否存在缺失值】
# True:~NaN False:NaN
pd.notnull(df)
4.isnull()【检测是否存在缺失值】
# 用法与pd.isnull()一样
df.isnull()
5.notnull()【检测是否存在缺失值】
# 用法与pd.notnull()一样
df.notnull()
6.过滤数据,保留~NaN数据【很重要】
cond = pd.notnull(df)
line = df[df.isnull().values == True] # 查找有缺失值的行
all_line = list(df.index) # 获取所有数据的索引
all_line.remove(line.index) # 将有缺失值的索引删除
df2 = df.iloc[all_line] # 获取没有缺失值的数据
7.缺失值处理,去掉空值
1. 去掉为空的行数据【很重要】
2. 去掉为空的列数据【很重要】
3.dropna()删除(只能删除空值)【很重要】
all()与any()需要配合isnull()或notnull()一起使用
内置方法axis=0、1判断是对行操作还是对列进行操作,默认为0 索引是columns
all() 必须都为True,才会为True 类似于and
any() 只要有一个为True,就会为True 类似于 or
dropna():删除空值
fillna():填充空值
7.1 源数据
data = np.random.randint(0, 100, size=(5, 5))
df = pd.DataFrame(data=data, columns=list('ABCDE'))
df.loc[2, 'B'] = np.nan
df.loc[3, 'C'] = None
7.2 any()【只要有一个为True,就会为True 类似于 or】
如果不写axis默认等于0,对列进行操作
df.isnull().any()
7.3 all()【必须都为True,才会为True 类似于and】
df.isnull().all()
7.4 去掉为空的行数据【很重要】
注意:axis=1是对行进行操作
cond = df.isnull().any(axis=1)
df = df[~cond]
7.4 去掉为空的列数据【很重要】
cond = df.isnull().any(axis=0)
df.loc[:, ~cond]
7.4 dropna()删除(只能删除空值)【很重要】
df.dropna() # 默认情况下删除有空的行
# df.dropna(axis=1) # 删除有空的列
7.5 源数据
df['F'] = [np.nan, np.nan, np.nan, np.nan, np.nan] # 插入一列数据
df = df.append(pd.DataFrame({"A": np.nan, "B": np.nan, "C": np.nan, "D": np.nan, "E": np.nan, "F": np.nan}, index=[5]))
7.6 行或列中,只要有一个NaN就删除
# how默认是any 只要有一个空数据就删除所在的列或行
# axis = 0 删除行(默认)
# axis = 1 删除列
df.dropna(how='any')
7.7 行或列中,都为NaN时才会删除
# all 必须这一列或者这一行中的所有数据都为NaN的时候才会删除
# dropna()会生成一个新的数据,不会修改原有数据
# 如果要修改原有数据,可以使用inplace = True
df.dropna(how='all', inplace=True)
7.缺失值处理,填充
# value=填充的值
# limit=限制填充的次数
# method=填充的方式 这是对于行来计算的
# ffill:向前填充
# backfill:向后填充
# 如果想对列计算,需要使用axis=1对列进行填充
df
7.1 向前填充
df.fillna(method='ffill')
7.2 向后填充
df.fillna(method='backfill')
因为数据后面已经没有值了,所以还是NaN
7.3 向左填充
df.fillna(method='ffill', axis=1)
7.5 向右填充
df.fillna(method='backfill', axis=1)