数据清洗和准备
7.1 处理缺失值
滤除缺失值
对于一个Series,dropna函数返回一个仅含有非空数据和索引值的Series
而对于DataFrame,默认丢弃含有nan的行,如果不想执行的如此严格,可以传入how = 'all'只丢弃全为nan的行
传入轴参数可以指定丢弃含有nan的行或者列
还有一个thresh参数,thresh = n意思是保留至少有n个非nan值的行
填充缺失数据
主要用fillna函数来填补缺失值
向fillna函数传入整数就是用该整数填补缺失值,传入字典可以实现对不同列的缺失值用不同值来填补,而且此函数返回一个新对象,可以使用inplace = True来实现就地修改
reindex的填充方法对fillna函数也有效果,如method = 'ffill',limit = 2
fillna函数的参数:
7.2 数据转换
移除重复数据
DataFrame的duplicated方法返回一个布尔型Series,表示各行是否重复
还可以使用drop_duplicates方法来去除重复列,它返回的是一个DataFrame
此函数入到重复数据默认保留重复数据中的第一个,若传入keep = 'last',则保留最后一个
利用函数或映射进行数据转换
Series的map方法可以接受一个函数或者字典型对象来对Series中的每一个数据执行函数或者进行匹配(当传入字典时)
假如我们有如下DataFrame和字典:
我们可以新创建一列传入map字典的匹配结果
也可以用map匹配一个函数来实现上面的结果,当map匹配一个函数时跟apply函数作用相似
替换值
可以使用replace这个函数来替换,replace(A, B),A是要替换的值,将A替换成B,返回一个新的Series,如果传入inplace = True,则可以就地修改。
而且A和B也可以是列表用来替换多个值
也可以之间传入字典指定替换那些值,注意整数键不用加引号
重命名轴索引
可以使用data.index = xxx来直接在原地进行修改。
也可以使用rename方法返回一个新副本
也可以传入字典,对行或者列进行部分修改(行修改是将字典传入index,列修改是将字典传入columns)
若想用rename方法实现就地修改,传入inplace = True即可
离散化和面元划分
我们可以使用pandas的cut函数来实现面元划分
返回的是一个Categories对象,该对象有多个属性,codes属性可以查看原数据分别属于那些组,而categories可以查看划分了那些组,分组默认是左开右闭区间,传入right = False可以见分组变更成左闭右开区间
可以使用pandas的value_counts函数来计算每个组包含多少个值
cut函数的lables标签可以给不同组取名
除了向cut函数传入边界来划分数据,还可以向cut函数传入一个整数来进行划分,传入的整数是多少就划分多少组
上述传入整数是4,所以cut函数会根据数据最大值和最小值来均分整个区间,predision参数是明确划分的边界的精确度。
qcut函数和cut函数类似,不过qcut是均分
检测和过滤异常值
假设有下面一组数据
如果我们想要把改组数据限制在-3到3之间,可以用以下方法
排列和随机采样
随机排序一般使用numpy.random.permutation函数,给该函数输入一个整数,返回的是一个乱序的数组,如果给该函数传入的时list或者array数组,返回的是一个打乱的list/数组
np.random.permutation是用来返回一个乱序的数组或者list,而take函数是将数据相对于乱序进行重排。
Series和DataFrame的sample方法也可以实现上述结果,该函数返回一个新的副本
当inplace = True的时候,可以允许重排的数据个数与df或者ser的数据个数不一致
计算指标/哑变量
pandas的get_dummies函数可以根据传入的列来对该列中的数据派生出一个矩阵,矩阵的列是原指定列中的数据
7.3 字符串操作
字符串对象方法
主要介绍python字符串的一些方法,详细的可以看跟老齐学python笔记(1)
下面是字符串中的函数:
正则表达式
如果像重复使用自己创建的匹配模式,可以使用re.compile函数来进行编译
若想只希望得到regex匹配的内容,可以使用findall方法
match和search跟findall功能类似。findall返回的是字符串中所有的匹配项,⽽search则只返回第⼀个匹配项。match更加严格,它只匹配字符串的首部。
sub⽅法可以将匹配到的模式替换为指定字符串,并返回所得到的新字符串:
若想将字符串分段,要实现此功能,只需将待分段的模式的各部分⽤圆括号包起来即可,而分过组的数据,用groups函数来打印出来:
对于带有分组功能的模式,findall会返回⼀个元组列表: