pandas数据缺失处理

一 前言

数据分析中对数据的清洗是个比较重要的工作,如果处理不当会造成数据分析错误,故学习好相关数据清洗知识很有必要。知识追寻者忙于学习其它知识,有点懈怠了python, 努力补救中。

公众号:知识追寻者

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

二 数据缺失处理

数据缺失处理也就是对NaN的处理,通常的做法就是省略或者替换;

2.1 空值判定

调用isnull() 方法进行空值判定,返回布尔值;

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

import pandas as pd
import numpy as np

ser = pd.Series(['111','222',np.NaN])
# 空判定
print(ser.isnull())

输出

0    False
1    False
2     True
dtype: bool

2.2丢弃NaN

对于有些数据存在NaN,一般进行数据分析时都是不需要的数据,故会省略掉;使用 ser.dropna() 方法可以略过所有的NaN数据

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

import pandas as pd
import numpy as np

ser = pd.Series(['111','222',np.NaN])
# 过滤掉所有NAN
print(ser.dropna())

输出

0    111
1    222
dtype: object

如果想删除整列全为NaN的可以指定参数how= 'all'

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

import pandas as pd
import numpy as np

data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 过滤掉都是NaN的列
print(data.dropna(how='all'))

输出

     0    1    2
0  2.5  5.0  3.0
1  1.0  NaN  NaN

可以指定按列丢弃 axis = 1

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

import pandas as pd
import numpy as np

data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 按列丢弃
print(data.dropna(axis=1,how='all'))

输出

     0    1    2
0  2.5  5.0  3.0
1  1.0  NaN  NaN
2  NaN  NaN  NaN

2.3 数据填充

另一种手段对NaN的处理可以设置为默认值,比如 数值0;

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

import pandas as pd
import numpy as np

data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 填充
print(data.fillna(0))

输出

     0    1    2
0  2.5  5.0  3.0
1  1.0  0.0  0.0
2  0.0  0.0  0.0

对每个列设置默认值替换NaN可以使用字典

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

import pandas as pd
import numpy as np

data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
dic = {0:1, 1:2, 2:3}
# 填充
print(data.fillna(dic))

输出

     0    1    2
0  2.5  5.0  3.0
1  1.0  2.0  3.0
2  1.0  2.0  3.0

再复习一下填充,之前文章有到过;此时会对每列最后一个值进行填充NaN,并且使用limit 限定填充次数

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

import pandas as pd
import numpy as np

data = pd.DataFrame([[2.5, 5, 3], [1, np.NaN, np.NaN], [np.NaN, np.NaN, np.NaN]])
# 填充
print(data.fillna(method='ffill', limit=1))

输出

     0    1    2
0  2.5  5.0  3.0
1  1.0  5.0  3.0
2  1.0  NaN  NaN
posted @   知识追寻者  阅读(267)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示