python缺失值处理 fillna_pandas缺失值处理检测isnull、删除dropna、填充fillna

有些excel文件不标准,比如空行、有些单元格没有值等,这类情况我们称为缺失值。对于缺失值,我们往往会做三步走的处理,1检测缺失值,2丢弃一些缺失值,3填充一些缺失值

1、isnull和notnull

检测是否为空,适用于

# -*- coding: utf-8 -*-

import pandas as pd

df = pd.read_excel('test.xlsx')

print(df)

print('------------------')

print(df.loc[df['分数'].notnull()])

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

1 NaN 小王 语文 NaN NaN

2 NaN NaN 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

4 NaN NaN NaN NaN NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN NaN 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

------------------

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

2 NaN NaN 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN NaN 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

2、dropna 删除缺失值,主要了解3个参数

axis:0 or ‘index’, 1 or ‘columns’

how:any有一个缺失值就drop that row or column,‘all’ 所有值是缺失值才drop that row or column.

inpalce:bool, default False

# -*- coding: utf-8 -*-

import pandas as pd

df = pd.read_excel('test.xlsx')

print(df)

print('------------------')

# 删除空列

df.dropna(axis=1,how='all',inplace=True)

print(df)

print('------------------')

# 删除空行

df.dropna(axis=0,how='all',inplace=True)

print(df)

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

1 NaN 小王 语文 NaN NaN

2 NaN NaN 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

4 NaN NaN NaN NaN NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN NaN 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

------------------

姓名 科目 分数

0 小王 数学 87.0

1 小王 语文 NaN

2 NaN 英语 89.0

3 小张 数学 95.0

4 NaN NaN NaN

5 小张 语文 96.0

6 小张 英语 97.0

7 NaN 数学 50.0

8 小龙 语文 51.0

9 小龙 英语 52.0

------------------

姓名 科目 分数

0 小王 数学 87.0

1 小王 语文 NaN

2 NaN 英语 89.0

3 小张 数学 95.0

5 小张 语文 96.0

6 小张 英语 97.0

7 NaN 数学 50.0

8 小龙 语文 51.0

9 小龙 英语 52.0

3、fillna 填充缺失值,主要了解2个参数

value:填充的值,可以是单个值,可以是字典(key为列名,value是值)

method:等于ffill则使用前一个不为空的值填充,等于bfill使用后一个不为空的值填充

# -*- coding: utf-8 -*-

import pandas as pd

df = pd.read_excel('test.xlsx')

print(df)

print('------------------')

df.loc[:,'分数'] = df['分数'].fillna(100)

"""

等价于df.fillna({'分数':100})

"""

print(df)

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

1 NaN 小王 语文 NaN NaN

2 NaN NaN 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

4 NaN NaN NaN NaN NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN NaN 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

------------------

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

1 NaN 小王 语文 100.0 NaN

2 NaN NaN 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

4 NaN NaN NaN 100.0 NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN NaN 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

# -*- coding: utf-8 -*-

import pandas as pd

df = pd.read_excel('test.xlsx')

print(df)

print('------------------')

# index索引0到6用上面单元格的值填充

df.loc[0:6,'姓名'] = df['姓名'].fillna(method='ffill')

# index索引7到最后用下面单元格的值填充

df.loc[7:,'姓名'] = df['姓名'].fillna(method='bfill')

# 缺失的分数设为100

df.loc[:,'分数'] = df['分数'].fillna(100)

"""

等价于df.fillna({'分数':100})

"""

print(df)

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

1 NaN 小王 语文 NaN NaN

2 NaN NaN 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

4 NaN NaN NaN NaN NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN NaN 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

------------------

Unnamed: 0 姓名 科目 分数 性别

0 NaN 小王 数学 87.0 NaN

1 NaN 小王 语文 100.0 NaN

2 NaN 小王 英语 89.0 NaN

3 NaN 小张 数学 95.0 NaN

4 NaN 小张 NaN 100.0 NaN

5 NaN 小张 语文 96.0 NaN

6 NaN 小张 英语 97.0 NaN

7 NaN 小龙 数学 50.0 NaN

8 NaN 小龙 语文 51.0 NaN

9 NaN 小龙 英语 52.0 NaN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值