Pandas笔记5----------Pandas缺失值处理

1.空数据

  • None

    • python自带的空对象,不能参与到任何计算中

    • object类型的运算要比int类型的运算慢

  • np.nan

    • 浮点类型,能参与到计算中,但结果总是NaN

    • 可以使用np.nan*()函数来计算nan,此时会过滤掉nan

2.Pandas中的None与Nan

(1)Pandas中None与np.nan都视作np.nan

import numpy as np
import pandas as pd
data = np.random.randint(0,100,size=(5,5))
df = pd.DataFrame(data=data,columns=list('ABCDE'))
print(df)
print('###################################')
df.loc[2,'B'] = np.nan
df.loc[3,'C'] = None
print(df)

(2)Pandas中None与np.nan的操作

  • 判断函数(isnull()和notnull())

import numpy as np
import pandas as pd
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
print(df)
print('###################################')
print(df.isnull())
print('###################################')
print(df.notnull())
  • all()与any()

    • all():必须全部为True才会是True

    • any():只要有一个为True就为True

import numpy as np
import pandas as pd
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
print(df)
print('###################################')
#找有空值的列
print(df.isnull().any())
print('###################################')
#找都为空值的列
print(df.isnull().all())
print('###################################')
#找没有都是空值的列
print(df.notnull().any())
print('###################################')
#找没有空值的列
print(df.notnull().all())
print('###################################')
#找有空的行
print(df.isnull().any(axis=1))
print('###################################')
#找都为空的行
print(df.isnull().all(axis=1))
print('###################################')
#找没有都是空值的行
print(df.notnull().any(axis=1))
print('###################################')
#找没有空的行
print(df.notnull().all(axis=1))
print('###################################')

3.空值置过滤

(1)使用bool值索引过滤数据

import numpy as np
import pandas as pd
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
print(df)
print('###################################')
#过滤行
cond = df.isnull().any(axis=1)
print(df[~cond])
print('###################################')
cond1 = df.notnull().all(axis=1)
print(df[cond1])
#过滤列
cond3 = df.isnull().any()
print(df.loc[:,~cond3])
print('###################################')
cond4 = df.notnull().all()
print(df.loc[:,cond3])

(2)使用dropna()过滤,默认删除有空的行

import numpy as np
import pandas as pd
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
print(df)
print('###################################')
#删除有空的行
print(df.dropna())
print('###################################')
#删除有空的列
print(df.dropna(axis=1))
print('###################################')
#一列数据都为空才会过滤
print(df.dropna(how='all'))
print('###################################')
#一行数据都为空才会过滤
print(df.dropna(how='all',axis=1))
print('###################################')
#一行数据都为空才会过滤
df2 = df.copy
print('原df2:\n',df2)
print('###################################')
df2.dropna(inplace=True)
print('新df2:\n',df2)
print('###################################')

4.填充函数

import numpy as np
import pandas as pd
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
print(df)
print('###################################')
#填充nan
print(df.fillna(value=100))
print('###################################')
#limit:限制填充次数
df2 = df.copy()
df2.loc[1,'B'] = np.nan
df2.loc[2,'C'] = np.nan
print(df2)
print('###################################')
print(df2.fillna(value=100,limit=1))
print('###################################')
print(df.fillna(method='ffill'))#向前填充
print('###################################')
print(df.fillna(method='backfill'))#向后填充
print('###################################')
print(df.fillna(method='ffill',axis=1))#向左填充
print('###################################')
print(df.fillna(method='backfill',axis=1))#向右填充

知识点为听课总结笔记,课程为B站“千锋教育Pandas数据分析从入门到实战,零基础小白保姆级Python数据分析教程”:001_Pandas_Pandas介绍_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值