Pandas学习(5.1、处理缺失值)

本文详细介绍Pandas库处理缺失值的方法,包括过滤与补全缺失值的多种策略,适用于数据分析与预处理场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pandas as pd
import numpy as np

'''5.1 处理缺失值'''
'''对于数值型数据,pandas使用浮点值NaN(Not a Number)来表示缺失值。在pandas中,采用了R语言中的编程管理,将缺失值成为NA,意思是not available。
在统计学应用中,NA数据可以是不存在的数据或者是存在但不可观察的数据(例如在数据收集过程中出现了问题)。
当清洗数据用于分析时,对缺失数据本身进行分析以确定数据收集问题或数据丢失导致的数据偏差通常很重要。'''
string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])
# print(string_data.isnull())
'''
0    False
1    False
2     True
3    False
dtype: bool'''

'''Python内建的None值在对象数组中也被当做NA处理:'''
string_data[0] = None
# print(string_data.isnull())
'''
0     True
1    False
2     True
3    False
dtype: bool'''

'''
表:NA处理方法
函数名         描述
dropna      根据每个标签的值是否是缺失数据来筛选轴标签,并根据允许丢失的数据量来确定阈值
fillna      用某些值填充缺失的数据或使用插值方法(如'ffill'或'bfill')
isnull      返回表明哪些值是缺失值的布尔值
notnull     isnull的反函数
'''

'''5.1.1 过滤缺失值'''
'''虽然可以使用pandas.isnull和布尔值索引手动地过滤缺失值。但更推荐使用dropna。
在Series上使用dropna,它会返回Series中所有的非空数据及其索引值:'''
from numpy import nan as NA
# data = pd.Series([1, NA, 3.5, NA, 7])
# print(data.dropna())
'''
0    1.0
2    3.5
4    7.0
dtype: float64'''
#上述代码也可以换成:
# print(data[data.notnull()])

'''当处理DataFrame对象时,事情会稍微更复杂一点。你可能想要删除全部为NA或包含有NA的行或列。
dropna默认情况下会删除包含缺失值的行:'''
data = pd.DataFrame([[1., 6.6, 3.], [1., NA, NA],
                    [NA, NA, NA], [NA, 6.5, 3.]])
cleaned = data.dropna()
# print(cleaned)
#      0    1    2
# 0  1.0  6.6  3.0

'''传入how='all'时,将删除所有值均为NA的行:'''
# print(data.dropna(how='all'))
'''
     0    1    2
0  1.0  6.6  3.0
1  1.0  NaN  NaN
3  NaN  6.5  3.0'''
#如果要用同样的方法去删除列,传入参数axis=1:
data[4] = NA
# print(data.dropna(axis=1, how='all'))
'''
     0    1    2
0  1.0  6.6  3.0
1  1.0  NaN  NaN
2  NaN  NaN  NaN
3  NaN  6.5  3.0'''

'''过滤DataFrame的行的相关方法往往涉及时间序列数据。假设你只想保留包含一定数量的观察值的行。可以用thresh参数来表示:'''
# df = pd.DataFrame(np.random.randn(7, 3))
# df.iloc[:4, 1] = NA
# df.iloc[:2, 2] = NA
# print(df)
'''
          0         1         2
0  0.854705       NaN       NaN
1 -1.569215       NaN       NaN
2 -0.222426       NaN -1.852322
3  0.005517       NaN  0.951169
4  1.009100  1.075894  1.219964
5  0.794404  0.982503 -0.850304
6  0.521978 -0.277262  1.040425'''

# print(df.dropna())
'''
          0         1         2
4  1.009100  1.075894  1.219964
5  0.794404  0.982503 -0.850304
6  0.521978 -0.277262  1.040425'''

# print(df.dropna(thresh=2))
'''
          0         1         2
2 -0.222426       NaN -1.852322
3  0.005517       NaN  0.951169
4  1.009100  1.075894  1.219964
5  0.794404  0.982503 -0.850304
6  0.521978 -0.277262  1.040425'''


'''5.1.2 补全缺失值'''
'''在pandas中,主要使用fillna方法来补全缺失值。调用fillna时,可以使用一个常数来替代缺失值:'''
# print(df.fillna(0))

'''在调用fillna时使用字典,可以为不同列设定不同的填充值:'''
# print(df.fillna({1: 0.5, 2:0}))

'''fillna返回的是一个新的对象,但也可以修改已经存在的对象:'''
# df.fillna(0, inplace=True)
# print(df)

'''用于重建索引的相同的插值方法也可以用于fillna:'''
# df = pd.DataFrame(np.random.randn(6, 3))
# df.iloc[2:, 1] = NA
# df.iloc[4:, 2] = NA
# print(df)
'''
          0         1         2
0 -0.538626 -0.209218  0.373615
1  2.404745  0.216450 -0.618329
2  0.738927       NaN  0.955618
3 -0.117328       NaN  0.174980
4  1.618921       NaN       NaN
5 -1.695676       NaN       NaN'''
# print(df.fillna(method='ffill', limit=2))
'''
          0         1         2
0 -0.538626 -0.209218  0.373615
1  2.404745  0.216450 -0.618329
2  0.738927  0.216450  0.955618
3 -0.117328  0.216450  0.174980
4  1.618921       NaN  0.174980
5 -1.695676       NaN  0.174980'''

'''使用fillna可以完成很多带有一点创造性的工作。例如,可以将Series的平均值或中位数用于填充缺失值:'''
data = pd.Series([1., NA, 3.5, NA, 7])
# print(data.fillna(data.mean()))
'''
0    1.000000
1    3.833333
2    3.500000
3    3.833333
4    7.000000
dtype: float64'''

'''
表:fillna函数参数
参数          描述
value       标量值或字典型对象用于填充缺失值
method      插值方法,如果没有其他参数,默认是'ffill'
axis        需要填充的轴,默认axis=0
inplace     修改被调用的对象,而不是生成一个备份
limit       用于前向或后向填充时最大的填充范围
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值