Dar*_*ang 6 python memory pandas
当我使用Pandas DataFrame时,我有一些内存不一致.
这是我的代码框架:
import pandas as pd
import numpy as np
columns_dtype = {'A': np.int16, 'B': np.int8, ...}
df = pd.read_csv('my_file.csv', dtype=columns_dtype)
Run Code Online (Sandbox Code Playgroud)
这基本上只是在控制列数据类型的同时用pandas读取csv文件.但是,当我在寻找为我的程序分配多少内存时,这些信息似乎并不一致.
信息1:
df.info(memory_usage='deep')
Run Code Online (Sandbox Code Playgroud)
这给了: memory usage: 482.6 MB
信息2:
import dill, sys
sys.getsizeof(dill.dumps(df))
Run Code Online (Sandbox Code Playgroud)
这给了:( 506049782
所以506 Mb)
信息3:
分配给我的程序的RAM是:1.1 GiB(或1.2 Gb)
其他信息(但我认为不相关):
my_file.csv的大小是888 Mb(ls -lh)
问题:
因为我只是将我的csv文件加载到Pandas DataFrame对象中,为什么我的程序需要超过1 Gb的RAM而对象大小约为0.5 Gb?
非常感谢
小智 2
我不会假装知道动态内存在 Pandas 中保存数据的深层用途。Pandas 在加载大型平面文件时会感到饥饿,根据经验,Pandas 将使用 5-10 倍的 ram 量作为您要加载的文件大小进行分析。
为了避免这些问题,您可以在加载时对数据进行分块:
df = pd.load_csv(file_path, chunksize = 30000)
Run Code Online (Sandbox Code Playgroud)
或者如果您正在按列进行分析:
df = pd.load_csv(file_path, usecols = list_of_columns_index)
Run Code Online (Sandbox Code Playgroud)
或两者!
df = pd.load_csv(file_path, chunksize = 30000, usecols = list_of_columns_index)
Run Code Online (Sandbox Code Playgroud)
希望这有助于加快您的分析速度。
归档时间: |
|
查看次数: |
257 次 |
最近记录: |