今天说的是pandas的高级操作,包括替换操作,映射操作,随机抽样和分类处理。
替换操作
替换操作可以同步作用于Series和DataFrame中
单值替换:
普通替换: 替换所有符合要求的元素:to_replace=15,value='e'
按列指定单值替换: to_replace={列标签:替换值} value='value'
多值替换:
列表替换: to_replace=[] value=[]
字典替换(推荐) to_replace={to_replace:value,to_replace:value}
首先老样子引入三大库
单值替换我们就可以直接在to-replace后指定你想替换的值和想替换为的值。
这是原本的DataFame:
我们把8替换为eight,只需要写下如下代码:
我们也可以在to-replace后加上字典达到多值替换:
但这样子会有一个问题那就是比如上图的11,就全部被替换了,所以我们如果想要更精确可以指定某列进行替换:
这里0:89指的是隐式索引0所指定的列中的89,可以看见只有那个89被替换了。
那可能就想问了,那这样我如果还想再换掉别的值我能一串代码写完吗,那是可以的。
以如图所示的代码进行操作,就可以达到我替换了两个值的效果。
映射操作
概念:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)
map是数据Series的方法,只可以被Series调用
我们创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名
然后我们写一个字典来表述每个人的映射关系,之后将这个字典直接放入map就可以了:
注意,map是Series的方法,只能被Series调用。
我们来看看映射的实际运用:
可以发现,map里不只是字典,函数也是可以放进去的,不管是匿名函数还是普通的函数都是可以的。
随机抽样
排序实现的随机抽样(抽样取出来的数字行列索引保持不变)
主要使用这两个代码:
take()
np.random.permutation()
先创造一个DataFrame
我想把三列数据打乱,则可以用take()
indices里就是你想要的顺序,注意这里必须使用隐式索引,显示索引是没有用的。
而permutation的作用则是可以创造出数个随机的索引。
而我们将permutation放入indices就会让DataFrame随机排布
这里则是把列和行全部随机排列
随机抽样也就完成了。
分类处理‘
先创造一个关于水果的列表
这里分组则需要使用groupby()。
by后面则是指定要根据什么进行分组,.groups则是进行查看。
比如说我想得到苹果,香蕉和橙子的平均值,我们有两种方法。
不推荐下面那个方法的原因则是下面的是先对所有数据进行运算再提取,上面则是提取出想要的那列数据再计算,上面的更加节省算力。
之后我们将均价变为字典再放入map中,可以运用映射将均价也放入DataFrame中。
我们也可以根据颜色分类然后求平均重量:
这都非常灵活看实际运用