记一次减少Pandas DataFrame在科学计算中的内存占用

代码:

废话不多说直接上代码验证这个方法。详细内容可以看后面的说明。

import pandas as pd
import psutil

def mem_usage(pandas_obj):
    if isinstance(pandas_obj,pd.DataFrame):
        usage_b = pandas_obj.memory_usage(deep=True).sum()
    else: # 我们假设这不是一个df,而是一个 Series
        usage_b = pandas_obj.memory_usage(deep=True)
    usage_mb = usage_b / 1024 ** 2 # 将 bytes 转化成 megabytes
    return "{:03.2f} MB".format(usage_mb)


if __name__ == '__main__':

    data = pd.read_csv(r'C:\Users\Administrator\Downloads\20230428_071021.csv')
    print("普通方式讀取數據大小:" + mem_usage(data))
    data_with_new_read_way = pd.read_csv(r'C:\Users\Administrator\Downloads\20230428_071021.csv', dtype='category')
    print("新方式讀取數據大小:" + mem_usage(data_with_new_read_way))

内存占用结果如下,可见新方法读取到的dataframe占用的内存只有默认的六分之一。

普通方式讀取數據大小:238.12 MB
新方式讀取數據大小:43.61 MB

Process finished with exit code 0

引言:

Pandas是Python中最受欢迎的数据分析和科学计算库之一。然而,当处理大型数据集时,Pandas DataFrame可能会占用大量内存,导致性能下降。本文将介绍一个解决方案,即在处理列数据类型较少的情况下,通过使用dtype参数指定category类型,来减小DataFrame的内存占用。

正文:

  1. Pandas和DataFrame简介 Pandas是基于NumPy开发的一种数据处理工具,提供了高效、灵活且易于使用的数据结构,特别是DataFrame。DataFrame是一个二维的、带标签的数据结构,类似于电子表格或关系型数据库中的表格。然而,当处理大型数据集时,DataFrame可能会占用大量内存,成为性能瓶颈。

  2. 内存占用问题的原因 DataFrame的内存占用问题主要源于每列的数据类型。默认情况下,Pandas会为每列选择适当的数据类型,例如整数、浮点数或字符串。然而,某些列可能只包含有限的不同值,这意味着使用更加节省内存的数据类型可能是可行的。

  3. 使用dtype参数指定category类型 对于列中数据类型不多的情况,我们可以通过使用dtype参数并将其设置为category类型来显著减小DataFrame的内存占用。category类型是一种高度优化的数据类型,适用于具有有限不同值的列。

    例如,当使用pd.read_csv读取数据时,我们可以通过指定dtype参数为category类型来优化内存占用,如下所示:

    import pandas as pd
    
    df = pd.read_csv('data.csv', dtype={'column_name': 'category'})
    
    #如果要指定所有的列均使用category读取的话,可以不特别指定column
    df = pd.read_csv('data.csv', dtype='category')

  4. 潜在的注意事项 尽管category类型可以显著减小内存占用,但它也可能带来一些潜在的注意事项。例如,由于数据存储为整数,而不是原始的对象类型,可能会导致一些数据操作的行为发生变化。此外,对于包含大量不同值的列,使用category类型可能不会产生明显的内存优势。
  5. 在实际使用中,我们应该根据数据集的特征和需求来评估是否使用category类型,并在进行内存优化时进行测试和验证。

    结论:

        在处理Pandas DataFrame时,特别是当面临大型数据集和内存占用问题时,通过使用dtype参数指定category类型可以显著减小内存占用。这种优化方法适用于列中数据类型较少的情况,可以提高性能并减少计算资源的消耗。然而,在应用该方法时,我们需要注意潜在的注意事项,并进行适当的测试和验证。

希望本文能帮助您更好地解决Pandas DataFrame在科学计算中的内存占用问题,提高数据处理效率。谢谢阅读!

你可能感兴趣的:(笔记,pandas,python,数据分析)