python – pandas数据框 – 选择行和清除内存?

前端之家收集整理的这篇文章主要介绍了python – pandas数据框 – 选择行和清除内存?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个大型的pandas数据帧(大小= 3 GB):

x = read.table(‘big_table.txt’,sep=’\t’,header=0,index_col=0)

因为我在内存限制下工作,所以我对数据帧进行了子集化:

rows = calculate_rows() # a function that calculates what rows I need

cols = calculate_cols() # a function that calculates what cols I need

x = x.ix[rows,cols]

计算行和列的函数并不重要,但它们绝对是原始行和列的较小子集.但是,当我执行此操作时,内存使用量会增加很多!最初的目标是将内存占用减少到3GB以下,但内存使用量远远超过6GB.

我猜这是因为Python在内存中创建了数据帧的本地副本,但是没有清理它.可能还有其他事情正在发生……所以我的问题是如何对大型数据框进行子集化并清理空间?我找不到一个选择行/列的函数.

我已经阅读了很多Stack Overflow,但在这个主题上找不到多少.可能是我没有使用正确的关键字,所以如果你有建议,这也可能有所帮助.谢谢!

解决方法

做这样的事情要好得多:

指定usecols以在第一个位置为read_csv选择所需的列,请参阅here.

然后以块的形式读取文件,参见here,如果选择了所需的行,将它们分流到关闭状态,最后连接结果.

伪码ish:

reader = pd.read_csv('big_table.txt',sep='\t',index_col=0,usecols=the_columns_i_want_to_use,chunksize=10000)

df = pd.concat([ chunk.ix[rows_that_I_want_] for chunk in reader ])

这将具有恒定的内存使用量(块的大小)

加上选定的行用法x 2,这将在您连接行时发生在concat之后,使用情况将下降到选定的行使用情况

猜你在找的Python相关文章