最近出了几期pandas的函数用法和一些数据框操作的讲解文章,感觉效果还行——一些有幸能被推荐,让更多人看到,帮助到一些人的同时,我也收获了许多宝贵的改进建议——欢迎大家继续批评指正,我们一起互相进步。
最近有读者反映我的内容中一些常用的基础函数并没有经过讲解,导致“基础教程”并不“基础”。缺乏基础的读者并不能一次性在我的文章里快速学到技巧,因为去找别的教程来看懂我的教程的确浪费精力。
因此本期我们补一下pandas基础的操作,包括但不限于:
迭代(也有称作遍历循环的,具体请看案例)
统计函数
排序
删除列
一、序列与数据框的迭代
事实上,基于python的数据分析通常都希望通过函数完成对多个元素的操作,而避免直接通过python的循环来进行运算:
比如我们需要统计某数据文件中记录的数量,一般不会像底层语言一样,选择用循环去过一遍所有的记录,然后每过一个记录用计数器n=n+1
这种方式来获得结果,而是采用len()、sum()或者size()函数来统计(具体选择哪个需要根据情况另外分析)
这主要是考虑到python作为高级脚本语言,循环效率不高,且占用内存和算力较高,运行速度可能比较慢(小数据量感觉不出来),而python提供的海量函数和方法,包括第三方库的函数和方法,通常函数底层都用c实现的循环。底层编译语言的优势大家心知肚明,并且可以相信大佬们用c写出来的工具,一定在内存等细节的调节上“神乎其计”
所以pandas作为一个大数据的第三方库,提供的函数和方法基本上应该覆盖了全部的需求,我们在今后的数据处理上一定要尽可能使用他们,而非自己用python基础语法从头自己写算法。这样处理大数据才效率最高
但是为什么我们还需要学习序列和数据框迭代呢?
显然,有时确实要做一些非常特殊的统计,pandas没有相关的工具提供给我们,必须要通过python进行循环。
或者针对初学者,我们需要用一下循环去遍历输出一下某数据对象,看看其内部结构,便于理解。
1、列迭代:
iteritems()
函数用于迭代时快速取出DataFrame中的每列
如图,iteritems将df转化为了可迭代对象(可用for循环遍历的对象),我们需要取出各个列的数据时,print出迭代变量的第二个元素即可——i[1]
那么i是什么呢?我们探究一下这个可迭代对象内部结构:直接print(i)
可以看出是一个个元组,元组的第一个元素是列名,第二个元素是索引和列数据一一对应的series序列。
2、行迭代:
iterrows()
函数用于快速取出DataFrame中每行:
本质上和列一样。
这就完成了对数据框的迭代探究,我们可以在有需要的时候迭代(遍历)数据框来查看数据了
3、序列迭代:
同理。只不过序列(series)只能用iteritems()。因为他没有行,只有一列数据。
需要注意的是,series本身也是可以迭代的,但是用iteritems()生成的可迭代对象效率会快一些
上面是直接迭代,下面是用iteritmes的迭代。数据量小的时候没有明显区别。
二、统计函数
常用的统计函数:
平均(mean)
求和(sum)
最大值(max)
最小值(min)
中位数(median)
方差(var)
标准差(std)
累乘(prod)
均值绝对偏差(mad)
……
除此之外还有pandas的统计集成函数describe():
以及超好用的自定义统计函数agg():
具体的由于函数过多,我们会在之后的文章里一一介绍。有兴趣的朋友可以直接自己试试,自己动手印象最深。
三、排序
正如我前面提到的,python的运行效率相对不高,如果一位算法极客到python这里,却用底层语言的“冒泡排序”、“选择排序”、“快速排序”这些算法来手搓大数据,估计效果不尽人意。
事实上,个人感觉python的正解就是调用函数。就拿排序函数而言,其本身是基于c语言的快速排序,不论是速度还是空间复杂度,绝对快于你手写嵌套循环的冒泡或选择排序。
pandas处理大数据时也是如此,我们有sort_values()用于给序列或者数据框排序:
如图,非常简单。唯一要注意的是同列数据需要同类才能排序。字符与字符排序则是比较ASCII码。
如果有特定情况需要给索引排序,则有sort_index():
对数据框进行排序记得在sort_value()里设置by参数,用以确认你是以什么为基准排序的
思考:
是否可以设置多个by参数?是否有excel中那种主次要关键字排序?
(答:)
如上,必然是有的。设置传入列表就可以了,默认按列表顺序决定关键字顺序
四、删除列
当我们想把某一列数据剔除时,用drop
函数即可
df1.drop(columns=["high"])#删除某一特定列
df1.drop(index=["Tom"])#删除某特定行
df1.drop(index=["Jack","Steve"])#批量删除,范例是删除行。列也可以
非常简单吧~
结语
基础还是后续的保证。这些操作不能保证后期会经常出现,但是理解了这些之后对进阶操作会有认知上的帮助。
千里之行始于足下,相信每个有志的掘友都能实现自己的技术梦!