加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

pandas小记:pandas数据规整化-缺失和冗余数据处理

发布时间:2020-12-14 05:05:27 所属栏目:大数据 来源:网络整理
导读:http://blog.csdn.net/pipisorry/article/details/39482861 处理缺失数据 缺失数据(missing data)在大部分数据分析应用中都很常见。pandas的设计目标之一就是让缺失数据的处理任务尽量轻松,pandas对象上的所有描述统计都排除了缺失数据。 pandas使用浮点Na

http://blog.csdn.net/pipisorry/article/details/39482861

处理缺失数据

缺失数据(missing data)在大部分数据分析应用中都很常见。pandas的设计目标之一就是让缺失数据的处理任务尽量轻松,pandas对象上的所有描述统计都排除了缺失数据。
pandas使用浮点NaN (Not a Number)表示浮点和非浮点数组中的缺失数据,它只是一个便于被检测出来的标记而已。pandas primarily uses the value?np.nan?to represent missing data. It is bydefault not included in computations.

NA处理方法

方法?? ????????????????????? 说明
dropna?? ?根据各标签的中是否存在缺失数据对轴标签进行过滤,可通过阈调节对缺失的容忍度
fillna?? ???????? 用指定或插方法(如ffill或bfill)填充缺失数据
isnull ?? ????????? 返回一个含有布尔的对象,这些布尔表示哪些是缺失/NA,该对象的类型与源类型一样
notnull?? ?isnull 的否定式

>>>string_data=Series(['aardvark','artichoke',np.nan,'avocado'])
>>> string_data
0???? aardvark
1??? artichoke
2????????? NaN
3????? avocado
dtype: object

isnull()

>>> string_data.isnull()
0??? False
1??? False
2???? True
3??? False
dtype: bool
Python内置的None也会被当做NA处理

Note:使用pd函数可以直接对str类型或者float类型的nan判断是否是pandas的nan类型:pd.isnull(df1)。

滤除缺失数据dropna

过滤掉缺失数据的办法有很多种,纯手工操作永远都是一个办法,但dropna可能会更实用一些。

对于Series,dropna返回一个仅含非空数据和索引的Series:
>>> from numpy import nan as NA
>>>data = Series([1,NA,3.5,7])
>>>data.dropna()
0??? 1.0
2??? 3.5
4??? 7.0
dtype: float64
当然,也可以通过布尔型索引达到这个目的data[data.notnull()]
对于DataFrame对象,dropna默认丢弃任何含有缺失的行:
>>>data = pd.DataFrame([[1.,6.5,3.],[1.,NA],[NA,3.1]])
>>>data.dropna()
???? 0??? 1??? 2
0? 1.0? 6.5? 3.0
传入how='all'将只丢弃全为NA的那些行:
>>>data.dropna(how='all')

???? 0??? 1??? 2
0? 1.0? 6.5? 3.0
1? 1.0? NaN? NaN
3? NaN? 6.5? 3.1

To drop any rows that have missing data: df1.dropna(how='any')

丢弃列axis=1
>>>data[4] = NA
>>>data
>>>data.dropna(axis=1,how='all‘)

只留下一部分观测数据thresh参数

另一个滤除DataFrame行的问题涉及时间序列数据。假设只想留下一部分观测数据, 可以用thresh参数实现此目的(至少要有thresh个非NA值?):
>>>df = df.DataFrame(np.random.randn(7,3))
>>>df.ix[:4,1] = NA; df.ix[:2,2] = NA
>>>df

????????? 0???????? 1???????? 2
0 -0.776521?????? NaN?????? NaN
1 -1.179873?????? NaN?????? NaN
2 -0.479620?????? NaN?????? NaN
3 -0.214146?????? NaN -0.387709
4? 0.864021?????? NaN -1.198854
5 -1.654861 -1.367580 -1.010236
6? 0.454499? 0.938988 -0.511850

>>>df.dropna(thresh=3)

????????? 0???????? 1???????? 2
5 -1.654861 -1.367580 -1.010236
6? 0.454499? 0.938988 -0.511850

填充缺失数据fillna

若不想滤除缺失数据(有可能会丢弃跟它有关的其他数据),而是希望通过其他方式填补那些“空洞”。对于大多数情况而言,fillna方法是最主要的函数。
fillna函数的参数
value?? ?????? 用于填充缺失的标量或字典对象
method??? 插方式。如果函数调用时未指定其他参数的话,默认为“ffill”
axis?? ??????? 待填充的轴,默认axis=0
inplace???? 修改调用者对象而不产生副本?? ?
limit?? ??????? (对于前向和后向填充)可以连续填充的最大数量


通过一个常数调用fillna就会将缺失替换为那个常数:
>>> df.fillna(0)
若是通过一个字典调用fillna,就可以实现对不同的列填充不同的
>>> df.fillna({1:?? 0.5,3: -1})
fillna默认会返回新对象,但也可以对现有对象进行就地修改:
#总是返回被填允对象的引用
>>> _ = df.fillna(0,inplace=True)
reindex有效的那些插方法也可用于fillna:
>>> df = DataFrame(np.random.randn(6,3))
>>>df.ix[2:,1] = NA; df.ix[4:,2] = NA
>>>df.fillna(method='ffill')
>>>df.fillna(method='ffill',limit=2)
传入Series 的平均或中位数
>>>data = Series([1.,7])
>>>data.fillna(data.mean())
0??? 1.000000
1??? 3.833333
2??? 3.500000
3??? 3.833333
4??? 7.000000
dtype: float64

[Missing Data section]

皮皮Blog



冗余数据处理Duplicate Data

DataFrame的duplicated方法返回一个布尔型Series,表示各行是否重复行。而 drop_duplicates方法,它用于返回一个移除了重复行的DataFrame

data.drop_duplicates(inplace=True) 或者data = data.drop_duplicates()

只对某一列有重复则删除:

df.drop_duplicates(subset=0,inplace=True)
[ API : pandas.DataFrame.drop_duplicates]
[ Duplicate Data]

皮皮blog

from:http://www.voidcn.com/article/p-wzjnaxkb-bbo.html

ref: [Working with missing data]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读