目录
数据清洗与准备
7.1处理缺失值
7.1.1过滤缺失值——dropna()
在series上使用dropna,它会返回series中所有的非空数据及其索引值
data.dropna()等价于data[data.notnull]
dropna默认情况下会删除包含缺失值的行
data.dropna(how='all')——将删除所有值为NA的行
data.dropna(how='all',axis=1)——同样的方式去删除列
df.dropna ( thresh=n )——这一行除去NA值,剩余数值的数量大于等于n,便显示这一行
7.1.2补全缺失值
fillna默认(ffill)补充的是同一列中的前一个数
7.2数据转换
7.2.1删除重复值
DataFrame的duplicated 方法返回的是一个布尔值Series——这个Series反映的是每一个是否存在重复(与之前出现过的行相同)情况
DataFrame的drop_duplicates方法是返回的是DataFrame,内容为duplicated返回数组中为False的部分
(这些方法默认都是对列进行操作)
基于'某一列'去除重复值:data.drop_duplicates(['k1'])将显示处理后全DataFrame
duplicated 与drop_duplicates都是默认保留第一个观测到的值,传入参数keep='last'将返回最后一个:
data.drop_duplicates(['k1','k2'],keep='last')
7.2.2使用函数或映射进行数据转换
map方法接收了一个函数或一个包含映射关系的字典型对象
7.2.3替代值
(使用fillna填充缺失值是通用值替换的特殊案例)
replace方法生成新的Series(除非传入一个inplace=True)
data.replace(-999,np.nan)
一次代替多个值,传入一个列表和替代值
data.replace([-999,-1000],np.nan)
不同的值替换不同的值,传入替代值列表:
data.replace([-999,-1000],[np.nan,0])
数据也可以通过字典传递:
data.replace({-999:np.nan,-1000:0})
7.2.4重命名轴索引
通过函数或某种形式的映射对轴标签进行类似的转换,生成新的且带有不同标签的对象。
可以在不生成新的数据结构的情况下修改轴
rename方法不修改原有数据集,创建数据集转换后的版本:
rename方法可以结合字典型数据使用,为轴标签的子集提供最新的值:
(如果要修改原有的数据集,传入inplace=True)
7.2.5离散化和分箱
离散化,把无限空间中有限的个体映射到有限的空间中去,比如 薪水收入 映射到高收入、中等收入、低收入。分箱是数据分组
cut()方法切割
注意:cats中已经将每个数据分好箱,比如数据18,此时显示的则是(18,25],像是箱子的名称一样,而cats.codes则是根据区间顺序,返回cats中每个箱子的索引:
cats.categories则返回cats的区间值,相当于是返回了分箱的标准,是按照哪些区间来分的
pd.value_counts(cats)返回值 是 pandas.cut的结果中的箱子数量
并重新定义索引值,dfbin.index=['少年','青年','中年','老年']对结果完善
cut 的labels选项:传入一个列表或者数组来传入自定义的箱名
cut其他参数:
right=False改变封闭的方向;precision=2将十进制精度限制在两位
qcut()方法切割——基于样本分位数进行分箱
cut: 按连续数据的大小分到各个桶里,每个桶里样本量可能不同,但是,每个桶相当于一个等长的区间,即:以数据的最大和最小为边界,等分成p个桶。
qcut: 与cut主要的区别就是每个桶里的样本数量是一定的。
7.2.6检测和过滤异常值
假设找出绝对值大于3的列
选出所有的行或列,使用any()函数
np.sign(data)根据数据中的值的正负值分别生成1和-1的数值
7.2.7置换和随机抽样
使用np.random.permutation对DataFrame中的Series或行进行置换。
调用permutation时根据你想要的轴长度可以产生一个表示新顺序的整数数组
df.sample(n=3,replace=True)#生成随机子集,且允许有重复选择