今天分享一个数据清洗小技巧,可以让你在遇到百万、千万级别数据的时候游刃有余。先来说说问题的背景
现在有一个 csv 格式的数据集,大概 2千万条 左右的样子,存储的是用户的网络交互数据,其中电话号码作为用户的唯一标识。再来看看我们要做啥
首先我们需要针对这批用户确定所属运营商,其次根据交互数据对各运营商的用户感知情况进行分析,最后给出各运营商的相应优化解决措施。
这个目标的第一部分:确定用户归属运营商,正好可以用今天这个小技巧去解决。
判断两千万个号码中每个号码归属的运营商,你应该首先会想到循环遍历。
但是你如果真的挨个号码去遍历一次,你会发现读一遍数据都需要好久,甚至可能会需要几分钟、十几分钟。
所以今天会用到 Pandas 中的矢量化操作,通过isin 函数进行筛选过滤,完成上面这个任务 只需要一两秒
矢量化操作
矢量化,有别于对每一个单独的值(标量)进行操作,是 Pandas 底层支持的对于整个 Array 进行的操作,也是Pandas 中执行的最快的方法。
这种操作适用于对某一列的全体数据进行普适的操作,即矢量化是对整个数组执行操作的过程。
矢量化操作适用于 Pandas 的 Dataframe,Series 对象
Pandas 对于常用的函数,例如求和、平均值等常用统计函数做了非常好的矢量化支持。
在大多数场景下,我们需要做的只是 把一整列的元素,当成一个元素去处理,Pandas 会自动把函数应用到每一个单元格上。例如df_data['age'] = df_data['age'] + 5
这就是最简单的矢量化