PYTHON处理缺失值(删除)

本文介绍了Pandas库在处理数据分析中遇到的缺失数据问题,使用NaN值表示,并展示了如何使用Pandas的dropna函数及其不同参数选项来滤除或管理缺失值,包括Series和DataFrame对象的处理方法,以及针对时间序列数据的特定应用。
摘要由CSDN通过智能技术生成
在许多数据分析⼯作中,缺失数据是经常发⽣的。 pandas 的⽬
标之⼀就是尽量轻松地处理缺失数据。例如, pandas 对象的所
有描述性统计默认都不包括缺失数据。
缺失数据在 pandas 中呈现的⽅式有些不完美,但对于⼤多数⽤
户可以保证功能正常。对于数值数据, pandas 使⽤浮点值
NaN Not a Number )表示缺失数据。我们称其为哨兵值,可以
⽅便的检测出来:
import pandas as pd
import numpy as np
string_data =  pd.Series(['aardvark', 'artichoke',np.nan,    'avocado'])
print(string_data)

print(string_data.isnull())#用isnull来判断是否为空

OUT:

0    False
1    False
2     True
3    False
dtype: bool

pandas 中,我们采⽤了 R 语⾔中的惯⽤法,即将缺失值表示为
NA ,它表示不可⽤ not available 。在统计应⽤中, NA 数据可能
是不存在的数据或者虽然存在,但是没有观察到(例如,数据采
集中发⽣了问题)。当进⾏数据清洗以进⾏分析时,最好直接对
缺失数据进⾏分析,以判断数据采集的问题或缺失数据可能导致
的偏差。
Python 内置的 None 值在对象数组中也可以作为 NA
string_data[0] = None
print(
    string_data
)
print(string_data.isnull())

0         None
1    artichoke
2          NaN
3      avocado
dtype: object
0     True
1    False
2     True
3    False
dtype: bool

pandas 项⽬中还在不断优化内部细节以更好处理缺失数据,像
⽤户 API 功能,例如 pandas.isnull ,去除了许多恼⼈的细节。表
7-1 列出了⼀些关于缺失数据处理的函数。
滤除缺失数据
过滤掉缺失数据的办法有很多种。你可以通过 pandas.isnull 或布
尔索引的⼿⼯⽅法,但 dropna 可能会更实⽤⼀些。对于⼀个
Series dropna 返回⼀个仅含⾮空数据和索引值的 Series
from numpy import nan as NA
data = pd.Series([1,NA, 3.5,NA,7])
datas = data.dropna()
print(datas)
data.dropna() 等价于data[data.notnull()]
⽽对于 DataFrame 对象,事情就有点复杂了。你可能希望丢弃全
NA 或含有 NA 的⾏或列。 dropna 默认丢弃任何含有缺失值的⾏:
原数据:
import pandas as pd
from numpy import nan as NA
data = pd.DataFrame([[1.,6.5,3.0],[1.0,NA,NA],[NA,NA,NA],[NA,6.5,3.]])
cleaned = data.dropna()
print(cleaned)

out:

传⼊ how='all' 将只丢弃值全为 NA 的那些⾏:
data1=data.dropna(how='all')
print(data1)

out:

⽤这种⽅式丢弃列,只需传⼊ axis=1 即可:
data2=data.dropna(axis=1, how='all')
print(data2)

另⼀个滤除 DataFrame ⾏的问题涉及时间序列数据。假设你只想
留下⼀部分观测数据,可以⽤ thresh 参数实现此⽬的:
df = pd.DataFrame(np.random.randn(7, 3))
df.iloc[:4,1] = NA
df.iloc[:2,2]=NA
print(df)

df.dropna(thresh=2)
Out[32]:
        0         1      2
2 0.092908 NaN 0.769023
3 1.246435 NaN -1.296221
4 0.274992 0.228913 1.352917
5 0.886429 -2.001637 -0.371843
6 1.669025 -0.438570 -0.539741
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值