利用python进行数据分析第七章回顾笔记

第七章,数据清洗与准备
一,处理缺失数据

对于数值数据,pandas使用浮点值NaN表示缺失数据(哨兵值),可以使用pandas.isnull()方法检测。常用的方法有dropna()对缺失数据进行过滤,fillna()用指定值或插值方法(ffill、bfill)填充缺失数据。

滤除缺失数据的办法有很多种data.dropna()或者data[data[notnull()],dropna()会默认丢弃含有缺失值的行,也可以传入参数how='all’丢弃全为NA的那些行。如果要丢弃列只需要加入参数axis=1。除此之外,还可以传入thresh参数留下一部分观察数据。

填充缺失数据则使用pandas.fillna()方法,可以通过一个字典调用fillna,实现对不同列填充不同的数据,fillna默认会返回新对象,可以传入参数inplace=True就地修改。关于fillna的其他参数,method则默认为ffill,limit则表示可以连续填充的最大数量。举个例子,可以使用fillna()填充平均值,data.fillna(data.mean())。

二,数据转换
移除重复的数据采用duplicated()方法,返回一个布尔型Series,表示各行是否有重复值。除此之外,还有一个drop_duplicates()方法,返回一个已丢弃重复行的DataFrame。drop_duplicates可以传入指定列过滤重复项drop_duplicates([columns]),duplicated 和 drop_duplicates默认保留第一个出现的值组合,可以传入keep=‘last’指定保留最后一个值组合。

利用函数或映射进行数据转换的方法主要有Series的map()函数,主要接受一个函数或者含有映射关系的字典型对象。

替换
利用fillna方法填充缺失数据是一种值替换的特殊情况,map则可以修改对象的数据子集,而replace方法则提供了更灵活、更简单的方式。replace会产生一个新的Series,除非传入inplace=True,就可以改变原数据。同时可以传递一个替换列表或者字典让每个值都有不同的替换值。

重命名轴索引
跟Series中的值⼀样,轴标签也可以通过函数或映射进⾏转换,
从⽽得到⼀个新的不同标签的对象。轴还可以被就地修改,⽽⽆
需新建⼀个数据结构。主要也是使用map方法,例如data.index.map(),如果要创建数据集的转换版而不是直接修改原数据可以使用rename()方法,rename可以结合字典或者一些upper方法之类的对部分轴标签进行更新。如果需要就地更改原数据,可以传入参数inplace=True。

离散化和面元化分
为了便于分析,连续数据常常被离散化或者拆分为面元(bin)。可以使用pandas的cut函数,会返回一个特殊的categories对象,展示了pandas.cut划分的面元。而返回的对象有codes和categories两个属性,codes返回一个array表示原数据出现在面元的位置,而categories则返回划分的面元。除此之外,可以使用value_counts(cut对象)计算pandas.cut结果的面元计数。同时,可以传入labels参数设置自己的面元名称。如果向面元传入的是面元的数量而不是指定区间,则它会根据数据的最大值、最小值计算等长面元。
qcut则是一个类似与cut的函数,它根据样本分位数对数据进⾏⾯元划,它返回的每个面元都含有相同数量的数据,而cut函数无法做到。你也可以传递自定义的分位数。

检测和过滤异常值
过滤和检测异常值很大程度就是运用数组运算,假设你想找出某列中绝对值超过3的值:

col=data[2],
 col[np.abs(col) > 3]

要选出全部含有超过3或-3的值可以用any方法:

data[(np.abs(data) > 3).any(1)]

也可以使用np.sign(data)将值限制在指定区间,np.sign(data)可以生成1, -1。

排列和随机采样
利用python.random.premutation函数可以对Series或DataFrame实现随机排列。通过需要排列的轴的⻓度调⽤permutation,例如: premutation(5)。

sampler	=	np.random.permutation(5)
df.take(sampler)

也可以直接使用df,sampler(n)继续随机排序,如果要通过替换的方式产生样本(允许重复选择),可以传递replace=True到sample。

计算指标和哑变量
如果某一列中含有K个不同的值,则可以派生出一个k列矩阵或DataFrame(其值全为0和1),可以使用pandas.get_dummies函数实现该功能。

df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],
                   'data1': range(6)})
pd.get_dummies(df['key'])

返回列名为key的三列六行的矩阵,出现的位置会显示1没出现的位置会以0代替。如果想为列加入一个前缀,可以使用prefix参数,例如:prefix=‘key’。

字符串操作
利用正则表达式,split(), join(),strip(), index(), find(), count(),replace()等方法进行数据处理,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值