python

当前位置:首页 > Pandas教程 > 当前文章

Pandas教程

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

2020-06-27 52赞 python中国网
每篇文章努力于解决一个问题!

  有些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



文章评论

pandas缺失值处理检测isnull、删除dropna、填充fillna文章写得不错,值得赞赏