Pandas 缺失数据处理的实现
作者:PythonGirl 发布时间:2023-07-14 05:57:38
数据丢失(缺失)在现实生活中总是一个问题。 机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题。 在这些领域,缺失值处理是使模型更加准确和有效的重点。
使用重构索引(reindexing),创建了一个缺少值的DataFrame。 在输出中,NaN表示不是数字的值。
一、检查缺失值
为了更容易地检测缺失值(以及跨越不同的数组dtype),Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法
示例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3),
index=['a', 'c', 'e', 'f','h'],
columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df)
print('\n')
print (df['one'].isnull())
输出结果:
one two three
a 0.036297 -0.615260 -1.341327
b NaN NaN NaN
c -1.908168 -0.779304 0.212467
d NaN NaN NaN
e 0.527409 -2.432343 0.190436
f 1.428975 -0.364970 1.084148
g NaN NaN NaN
h 0.763328 -0.818729 0.240498
a False
b True
c False
d True
e False
f False
g True
h False
Name: one, dtype: bool
示例2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df['one'].notnull())
输出结果:
a True
b False
c True
d False
e True
f True
g False
h True
Name: one, dtype: bool
二、缺少数据的计算
在求和数据时,NA将被视为0
如果数据全部是NA,那么结果将是NA
实例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df)
print('\n')
print (df['one'].sum())
输出结果:
one two three
a -1.191036 0.945107 -0.806292
b NaN NaN NaN
c 0.127794 -1.812588 -0.466076
d NaN NaN NaN
e 2.358568 0.559081 1.486490
f -0.242589 0.574916 -0.831853
g NaN NaN NaN
h -0.328030 1.815404 -1.706736
0.7247067964060545
示例2
import pandas as pd
df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
print(df)
print('\n')
print (df['one'].sum())
输出结果:
one two
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN0
三、填充缺少数据
Pandas提供了各种方法来清除缺失的值。fillna()函数可以通过几种方法用非空数据“填充”NA值。
用标量值替换NaN
以下程序显示如何用0替换NaN。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one','two', 'three'])
df = df.reindex(['a', 'b', 'c'])
print (df)
print('\n')
print ("NaN replaced with '0':")
print (df.fillna(0))
输出结果:
one two three
a -0.479425 -1.711840 -1.453384
b NaN NaN NaN
c -0.733606 -0.813315 0.476788NaN replaced with '0':
one two three
a -0.479425 -1.711840 -1.453384
b 0.000000 0.000000 0.000000
c -0.733606 -0.813315 0.476788
在这里填充零值; 当然,也可以填写任何其他的值。
替换丢失(或)通用值
很多时候,必须用一些具体的值取代一个通用的值。可以通过应用替换方法来实现这一点。用标量值替换NA是fillna()函数的等效行为。
示例
import pandas as pd
df = pd.DataFrame({'one':[10,20,30,40,50,2000],'two':[1000,0,30,40,50,60]})
print(df)
print('\n')
print (df.replace({1000:10,2000:60}))
输出结果:
one two
0 10 1000
1 20 0
2 30 30
3 40 40
4 50 50
5 2000 60one two
0 10 10
1 20 0
2 30 30
3 40 40
4 50 50
5 60 60
填写NA前进和后退
使用重构索引章节讨论的填充概念,来填补缺失的值。
方法 | 动作 |
---|---|
pad/fill | 填充方法向前 |
bfill/backfill | 填充方法向后 |
示例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df)
print('\n')
print (df.fillna(method='pad'))
输出结果:
one two three
a -0.023243 1.671621 -1.687063
b NaN NaN NaN
c -0.933355 0.609602 -0.620189
d NaN NaN NaN
e 0.151455 -1.324563 -0.598897
f 0.605670 -0.924828 -1.050643
g NaN NaN NaN
h 0.892414 -0.137194 -1.101791
one two three
a -0.023243 1.671621 -1.687063
b -0.023243 1.671621 -1.687063
c -0.933355 0.609602 -0.620189
d -0.933355 0.609602 -0.620189
e 0.151455 -1.324563 -0.598897
f 0.605670 -0.924828 -1.050643
g 0.605670 -0.924828 -1.050643
h 0.892414 -0.137194 -1.101791
示例2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df.fillna(method='backfill'))
输出结果:
one two three
a 2.278454 1.550483 -2.103731
b -0.779530 0.408493 1.247796
c -0.779530 0.408493 1.247796
d 0.262713 -1.073215 0.129808
e 0.262713 -1.073215 0.129808
f -0.600729 1.310515 -0.877586
g 0.395212 0.219146 -0.175024
h 0.395212 0.219146 -0.175024
四、丢失缺少的值
使用dropna函数和axis参数。 默认情况下,axis = 0,即在行上应用,这意味着如果行内的任何值是NA,那么整个行被排除。
实例1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f','h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df.dropna())
输出结果 :
one two three
a -0.719623 0.028103 -1.093178
c 0.040312 1.729596 0.451805
e -1.029418 1.920933 1.289485
f 1.217967 1.368064 0.527406
h 0.667855 0.147989 -1.035978
示例2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])
df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print (df.dropna(axis=1))
输出结果:
Empty DataFrame
Columns: []
Index: [a, b, c, d, e, f, g, h]
来源:https://www.cnblogs.com/Summer-skr--blog/p/11705887.html


猜你喜欢
- 本文实例讲述了Python使用scrapy采集数据时为每个请求随机分配user-agent的方法。分享给大家供大家参考。具体分析如下:通过这
- python3 sorted取消了对cmp的支持。python3 帮助文档:sorted(iterable,key=None,reverse
- 编者按,网站中让人惊喜的往往是那一点细节,只要用心留意你将发现那些美好的用户体验就在身边。新蛋网想自主控制链接在原窗口还是新窗口中打开?看看
- 使用Python的人都知道range()函数和list很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节。这里记录一下range(
- 获得当前日期+时间(date + time)函数:now()mysql> select now();+----------------
- 先给大家介绍下python中format函数,在文章下面给大家介绍python.format()函数的简单使用---恢复内容开始---pyt
- 一、fitz库是什么?Fitz库是一个Python图像处理库,主要用于打开、编辑和保存PDF、TIFF和JPEG格式的图像。它可以帮助用户读
- 问题描述:某天使用idea,突然发现git提交记录没法查看具体提交的文件了。只能看到提交记录,如下图:分析可能是修改了控件设置的原因,于是尝
- MySQL BETWEEN 用法MySQL BETWEEN 语法BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范
- 备注1:解决连接MySQL数据库很慢的问题vim /etc/my.cnf添加内容:skip-name-resolve,重启数据库。
- 1.安装Oracle Client连接到Oracle的前提是在SQL Server服务器上安装Oracle Client。Oracle Cl
- 随着计算机硬件的不断发展,多核CPU已经成为普及的硬件设备,利用多核CPU的优势可以有效的提高程序的执行效率。而多进程模式可以实现多核CPU
- 本文实例讲述了Python基于回溯法子集树模板解决数字组合问题。分享给大家供大家参考,具体如下:问题找出从自然数1、2、3、...、n中任取
- 1、df=DataFrame([{‘A':'11','B':'12'},{‘A
- 数据类型描述CHARACTER(n)字符/字符串。固定长度 n。VARCHAR(n) 或 CHARA
- 一、中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,
- 以下的实例为去除指定表中数据类型是VARCHAR,CHAR,NVARCHAR的字段值中的不可见字符。 注释:此处只去掉前后的不可见字符,不包
- 装饰器本质是一个接受参数为函数的函数。作用:为一个已经实现的方法添加额外的通用功能,比如日志记录、运行计时等。举例1.不带参数的装饰器,不用
- 故障现象 Oracle Database 11g 数据库普通用户登录时提示 ORA-28002: the password will exp
- 效果如下:代码如下:<!DOCTYPE html><html> <head> <meta char