Pandas实战 | 性能优化

2020-10-26  本文已影响0人  水土七口刀

_文{}_\equiv{}_{\nabla \Delta \nabla \Delta \nabla \Delta} {}^{皮}{}_{实}{}^{乐}{}_{观} {}^思_考 {}^有{}_{人^{生}}{}^{才_{有}}{}_{精^{彩}}
{}^{\star\star}{}^\equiv{}^{水土七口刀} {}_{生}{}^{活}{}_{阅}{}^{读} {}^运_动 {}_有{}^{兴_{趣}}{}_{才^{有}}{}^{人_{生}}


【走在成长的路上】总纲

读取数据优化——时间

读取数据时预定义数据类型——内存

统计数据优化 ——时间

避免循环——时间

第三方库——时间&内存

多核计算——时间

多采用内置函数来完成计算和比对——时间

查看DataFrame的内存占用量——内存

对数据类型进行选择——内存

在操作时避免冗余数据的读取与计算——时间&内存

尽可能的利用numpy进行计算 ——时间

降低DataFrame占用内存的函数代码

#降低DataFrame占用内存的函数代码
def reduce_mem_usage(df, verbose=True):
    numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
    start_mem = df.memory_usage().sum() / 1024 ** 2
    for col in df.columns:
        col_type = df[col].dtypes
        if col_type in numerics:
            c_min = df[col].min()
            c_max = df[col].max()
            if str(col_type)[:3] == 'int':
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)
            else:
                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)
    end_mem = df.memory_usage().sum() / 1024 ** 2
    if verbose:
        print('Mem. usage decreased to {:5.2f} Mb ({:.1f}% reduction)'.format(
            end_mem, 100 * (start_mem - end_mem) / start_mem))
    return df
上一篇:Pandas实战 DataFrame数据筛选重构——02 【Pandas实战系列目录】 下一篇:Pandas学习 性能优化
上一篇 下一篇

猜你喜欢

热点阅读