数据选择不迷茫
在海量的数据中,你如何挑选出符合你要求的数据呢?用肉眼一个个挑选筛选,别说上百亿的数据了,就算是一个上百的数据, 你都可能要挑个很久。Numpy 这时候就来拯救你了。不管是批量划分,还是按条件筛选,都能做到。
本节内容会包含下面这些功能:
- 单个选取
array[1]
array[1,2,3]
array[1][1]
- 切片划分
array[:3]
array[2:4, 1:3]
- 条件筛选
array[array<0]
np.where(array, array < 0)
单个选取¶
其实这里的单个选择,我想表达的意思是,单个单个的选择。下面的假设有三个同学,我要选其中的某个同学,就可以像 Python 中的 List 选择方法来选择。
当然还有种方法,可以一次性选择多个,但实际上选择的逻辑还是一个个拎出来的逻辑。就像一个个从抽屉里拿出来的意思。后面我们还会介绍一批拿出来的概念(切片划分)。
二维或者多维数据也可以用上面的方法来选择数据,一个个拎出来。
总之,在上面的选取方式中,不管是几维数据,我们都可以在其不同维度上挑选那个维度上对应序号上的数值。而且还能一次从原数据上选取多个数据点。
切片划分¶
上面已经介绍到了一个个拎出来数据的方式,基本上可以总结成,索引到具体的数上,就能拎出这个数具体的值。而有时候你会不会觉得特别麻烦, 如果我要在 100 个数中,从第一个一直找到第 50 个。我要写成这样 a[1,2,3,4....50]
,这样太累赘了。Numpy 也考虑得非常周全,它有一个更取巧的方式。
使用 :
就能让你跨着取数字,而且一次取一批。注意,在 Numpy 中:一次取一批和一个个拎起来,拎了一批,是不同的概念哦 一次取一批来的更快, 因为它不用去一个个查看,一个个数了。
在多维上,也可以进行切片划分。
条件筛选¶
上面选择一部分数据的方式比较没有选择性
。什么叫有选择性呢?其实就是按照一定的筛选逻辑进行过滤,留下那些在数值上符合条件的数据。 而上面的方式,只能从位置上选择。举个例子你可能比较明白一些。
按位置选:请这队同学中,第 2 号到第 6 号的同学出列
按数条件:请这队同学中,身高高于 1.5 米的同学出列
两种方法不分好坏,区别在于你当前的使用场景。用合适的方法筛选数据就行。
上面选取的是 a
数据中,大于 7 的数据。我们再拆开来看,a[a>7]
这里面究竟发生了什么。
既然 condition 是一种 True/False, 那么只要我们得到一个 True/False 数据,我都能做筛选。这才是它筛选的底层逻辑了。
除了这种直接用[]
的形式,在 Numpy 中,还有一个专用的函数来做数据筛选。这种筛选更强大,它还能做筛选结果的替换工作。 它可已将满足条件的位置变成你设定的数字。下面满足条件的,都改成 -1
,不满足的,都还是 a
里面的数字。
或者,不仅是满足条件的 condition
,不满足条件的,也能变成你期望的数字。
不光是数字哦,我还能让它和另外一个数据做条件上的整合哦,比如下面这样。如果满足 condition
要求,那么就会在对应的 True 位置放上 a
里的值,如果不满足 condition
要求,也就是在 condition
为 False 的地方放上 b
里对应位置的值。
所以 np.where()
函数真的十分强大,每每当我想要按条件选择、替换数据的时候,我脑海中,都是 np.where()
的身影。
总结¶
数据虽然有格式,但是如果要把数据用起来,还是得学会挑选和筛选。而今天介绍的单个、分段、条件筛选,都是数据工程师必备的一项技能。也是后续数据分析和机器学习的基石。