运算方法
我们已经提过如何用 Pandas 有效地筛选数据,也知道一些基本的统计学运算方法,而在这一节中, 我们想要关注的是在 Pandas 中如何运算。
所以本节将囊括:
筛选赋值运算¶
在之前筛选数据的教学中,我们能成功找出数据中的某个部分, 那么针对这个找出的部分,我们对它进行操作也是没问题的。比如下面我们先生成一组数据,然后在对这组数据进行筛选运算。
点击上方的运行按钮后,你可以看到数据生成后的样子,下面,我们在筛选出 A
column 出来,对 A
column 进行乘以 0 的运算。
你看看,新的 df 里面 A
column 是不是都变成 0 了!
同样,筛选数据教学中,提到的 iloc
loc
功能也是可以用来对某数据进行运算的。 以免你忘记,我简单回顾一下,iloc
找的是 index,loc
找的是标签。
看看现在 a
row A
column 的值是不是被改成了 100, 而第 [1, 0] 位是不是被改成了 200?这只是赋值,现在你拿这些赋值的方法进行运算试试? 比如:
我们再来试试按条件运算?下面做的是对于 df["A"]
, 我要找出 df["A"]
中等于 0 的数,把这些数赋值成 -1。
基本上,pandas 中可以用于筛选数据的方法都可以用来进一步把筛选出来的数据赋予新的值。
Apply方法¶
另一种比较方便的批处理数据的方法,我比较喜欢用的是 apply
。这是一种可以针对数据做自定义功能的运算。意味着可以简化数据做复杂的功能运算。 上面我们提到的筛选运算,其实是一种简单的运算方式,如果当运算变得复杂,甚至还需要很多局部变量来缓存运算结果,我们就可以尝试把运算过程放置在一个 func
中, 模块化。
举个例子,我有下面这批数据
我要对这个 df
做全量的平方根计算。 用一般能想到的方式,就会是下面这样。
如果用 apply
,就会变成
我们把 np.sqrt
这个函数当成一个参数传入了 apply
,看起来好像并没啥用,还不如直接写 np.sqrt(df)
来的方便。的确这个 case 写 np.sqrt(df)
是要简单点。 但是下面这种 case 呢?
这种极度自定义的功能,对 df
中的每一行,每行第 0 位乘以 2,第 1 位乘以 -1,我们原本的 col0,就都乘了 2,而 col1 就都乘了-1。 提示一下,apply
里面还有不同的参数项可以选,我使用了一个 result_type="expand"
的配置,让输出的结果可以生成多 column,要不然, 会只生成一个 column,所有的结果都写在这一个 column 里。要不你试试取消 result_type
,观察一下生成结果的变化。
顺带提一下,如果 reult_type="broadcast"
,那么原 column 和 index 名会继承到新生成的数据中。仔细对比上下两次的运行,你就能发现不同的表现了。
什么,你只想改一个 column,怎么写?
你想还是返回原 df,但只有一个 column 被修改了?
什么,你还想只对 row 进行操作?调一下 axis=0
和 func
里的运算规则。
总结¶
想对数据做特殊的运算,甚至想自定义功能,对数据做批量处理,我们今天就介绍了两大类方法,一种是直接索引-运算,一种是利用 pandas 的 apply 来做更为丰富的运算模式。