关于Pandas数据清洗的加速方法(二)

118 阅读1分钟

上一篇文章加速Pandas计算:优化数据处理性能的技巧与技术(numba) - 掘金 (juejin.cn) 我们学习了如何使用numba来加速Pandas的计算。下面我们继续分享数据清洗的加速方法(二):

image.png

这是来自天池的淘宝用户数据分享。当我们想把它的时间time拆分成year,mouth,day,hour四部分时。常见的方法可以通过匿名函数来划分,代码如下:

cleaned_data['year'] = cleaned_data['time'].apply(lambda x: x.strftime('%Y'))
cleaned_data['month'] = cleaned_data['time'].apply(lambda x: x.strftime('%m'))
cleaned_data['date'] = cleaned_data['time'].apply(lambda x: x.strftime('%d'))
cleaned_data['hour'] = cleaned_data['time'].apply(lambda x: x.strftime('%H'))

可以划分但是它划分比较费时。

下面我将分享Pandas 提供的内置方法进行操作。通过使用 .dt 属性和相应的方法,将它拆分成year,mouth,day,hour四部分。代码如下:

cleaned_data['year'] = cleaned_data['time'].dt.year
cleaned_data['month'] = cleaned_data['time'].dt.month
cleaned_data['date'] = cleaned_data['time'].dt.day
cleaned_data['hour'] = cleaned_data['time'].dt.hour

这样可以快速的划分时间。

还有一个当我们想查看数据是否重复时,常见的方法是使用duplicated(),当数据量非常大的时候,也非常费时。 代码如下:

original_data.duplicated(['user_id','item_id','behavior_type','user_geohash','item_category','time'])

使用上次学习的numba可以加速数据处理,代码如下:

import numba as nb
@nb.jit(nopython=True)
def check_duplicates(data, columns):
    return data.duplicated(columns)
original_data.duplicated(['user_id','item_id','behavior_type','user_geohash','item_category','time'])

这样就能够加速数据的处理了,今天的分享就到这了。