python list中分段_利用python进行数据分析笔记(4)

082a6c7b4694ac9913a2917195f8b9e7.png

数据清洗和准备

7.1 处理缺失值

滤除缺失值

对于一个Series,dropna函数返回一个仅含有非空数据和索引值的Series

bdd69df9afe9f5818650036d88fcc467.png

而对于DataFrame,默认丢弃含有nan的,如果不想执行的如此严格,可以传入how = 'all'只丢弃全为nan的行

cfbe0b0bc5d5b7ec0d4149305dc37d5e.png

传入轴参数可以指定丢弃含有nan的行或者列

1d8bdfba242b4ee2dd4e0f421d12674b.png

还有一个thresh参数,thresh = n意思是保留至少有n个非nan值的行

76955db9fdc4b390e9b82d1475233cc8.png

填充缺失数据

主要用fillna函数来填补缺失值

向fillna函数传入整数就是用该整数填补缺失值,传入字典可以实现对不同列的缺失值用不同值来填补,而且此函数返回一个新对象,可以使用inplace = True来实现就地修改

c6866fa02e3a03f246850fb5e5556700.png

reindex的填充方法对fillna函数也有效果,如method = 'ffill',limit = 2

9b10c6d97dfd849309a9a5ec82c4a0d9.png

fillna函数的参数:

61df4d207f47f0f8b36b884cf7238af6.png

1d19de7be8ea29174c96dc34e4966bb7.png

7.2 数据转换

移除重复数据

DataFrame的duplicated方法返回一个布尔型Series,表示各行是否重复

1ad688a7998a1b31fa9ae9aba84d9d39.png

还可以使用drop_duplicates方法来去除重复列,它返回的是一个DataFrame

a60e3fb5062f397d0814a61a52482160.png

此函数入到重复数据默认保留重复数据中的第一个,若传入keep = 'last',则保留最后一个

利用函数或映射进行数据转换

Series的map方法可以接受一个函数或者字典型对象来对Series中的每一个数据执行函数或者进行匹配(当传入字典时)
假如我们有如下DataFrame和字典:

c8a7a3ad21b4c2f0765549c12ebe1be4.png

我们可以新创建一列传入map字典的匹配结果

5b6ccb2ea7f89141665a4150fac13d8a.png

也可以用map匹配一个函数来实现上面的结果,当map匹配一个函数时跟apply函数作用相似

ace35d8c4ff12458d7f7eed5f08c4784.png

793cf5c4e9c08650486e12d91ce61e93.png

替换值

可以使用replace这个函数来替换,replace(A, B),A是要替换的值,将A替换成B,返回一个新的Series,如果传入inplace = True,则可以就地修改。

2157193685a8a5a435910a11cc86a929.png

而且A和B也可以是列表用来替换多个值

7c514217a65091ca4f8c365f6b8e01fc.png

也可以之间传入字典指定替换那些值,注意整数键不用加引号

77976d8080cb74552f8ebeac824b579a.png

重命名轴索引

e5658452e3b3149304b82bcdb3c1c704.png

可以使用data.index = xxx来直接在原地进行修改。
也可以使用rename方法返回一个新副本

acd7a3183d31e5d11dd475d6e438e362.png

也可以传入字典,对行或者列进行部分修改(行修改是将字典传入index,列修改是将字典传入columns)

527c2d6ae052f600d9a073e4ac3977cc.png

若想用rename方法实现就地修改,传入inplace = True即可

离散化和面元划分

我们可以使用pandas的cut函数来实现面元划分

990600deee8a4ada9493985ccc1e6361.png

返回的是一个Categories对象,该对象有多个属性,codes属性可以查看原数据分别属于那些组,而categories可以查看划分了那些组,分组默认是左开右闭区间,传入right = False可以见分组变更成左闭右开区间

6c4c9ee83d63af1c2105d608af43d1cf.png

可以使用pandas的value_counts函数来计算每个组包含多少个值

f7f16e13076e5ee013d619dc880929d1.png

cut函数的lables标签可以给不同组取名

db1eb8d981f70bdbaaf25bf22c789509.png

除了向cut函数传入边界来划分数据,还可以向cut函数传入一个整数来进行划分,传入的整数是多少就划分多少组

78d6477829af0c53558b8e779a91a046.png

上述传入整数是4,所以cut函数会根据数据最大值和最小值来均分整个区间,predision参数是明确划分的边界的精确度。

qcut函数和cut函数类似,不过qcut是均分

ccb73758399ba593cc7b7a298c670a45.png

检测和过滤异常值

假设有下面一组数据

6e51a0b244ef16504ec0aaff7cbf9fe7.png

如果我们想要把改组数据限制在-3到3之间,可以用以下方法

cacdbf841a5c88acd12ff0e38d6bf1ce.png

排列和随机采样

随机排序一般使用numpy.random.permutation函数,给该函数输入一个整数,返回的是一个乱序的数组,如果给该函数传入的时list或者array数组,返回的是一个打乱的list/数组

a3c2fe2b230351ae37da65e98206b09c.png

np.random.permutation是用来返回一个乱序的数组或者list,而take函数是将数据相对于乱序进行重排。

Series和DataFrame的sample方法也可以实现上述结果,该函数返回一个新的副本

67a94a8f733f57160b2e365d532b31a1.png

当inplace = True的时候,可以允许重排的数据个数与df或者ser的数据个数不一致

2e2f63c53616814b78dcb4ea2ab86efa.png

计算指标/哑变量

pandas的get_dummies函数可以根据传入的列来对该列中的数据派生出一个矩阵,矩阵的列是原指定列中的数据

2cbe0dbce5921536826180c699b0ff33.png

7.3 字符串操作

字符串对象方法

主要介绍python字符串的一些方法,详细的可以看跟老齐学python笔记(1)

下面是字符串中的函数:

2e89ea8818600ea162d4ca50a5d6680b.png

6e3801a3e804cb5f0da698ec5a1dad98.png

正则表达式

如果像重复使用自己创建的匹配模式,可以使用re.compile函数来进行编译

ad4a658dd27cd1f23a3a4354a03df577.png

若想只希望得到regex匹配的内容,可以使用findall方法

ff710019fda110944a5a271fb3788bc6.png

match和search跟findall功能类似。findall返回的是字符串中所有的匹配项,⽽search则只返回第⼀个匹配项。match更加严格,它只匹配字符串的首部。

sub⽅法可以将匹配到的模式替换为指定字符串,并返回所得到的新字符串:

7ecc43e7189b6842b34243175886e005.png

若想将字符串分段,要实现此功能,只需将待分段的模式的各部分⽤圆括号包起来即可,而分过组的数据,用groups函数来打印出来:

2c6519f093c4dc54d068d034197bb815.png

对于带有分组功能的模式,findall会返回⼀个元组列表:

a09c73095261c87c96b9bdc037eeb778.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值