处理大文件(> 600 MB)并执行groupby时,Python Pandas Desktop RAM崩溃

时间:2017-02-08 16:28:59

标签: python pandas

我正在使用Pandas处理大型CSV文件(> 600 MB)。 并通过几组来获取数据集中各种变量的频率统计数据(类似于SAS中的PROC FREQ)。但是熊猫正在停止这个系统。内存RAM的使用(通过Python)最高可达4 GB。

我还有其他列(如金额,日期等),我想要启用统计数据。

有没有办法让Pandas不加载到内存而是在磁盘中处理它们,所以系统性能不会降低? 或者任何有效处理的建议都会很棒?

以下代码:

// Get left and right row
int leftRow = left.row();
int rightRow = right.row();

// Get specific data from left row
QModelIndex leftIndex = sourceModel()->index(leftRow, SPECIFIC_DATA_INDEX);
QString leftProperty = sourceModel()->data(leftIndex).toString();
// Get specific data from right row
QModelIndex  rightIndex = sourceModel()->index(rightRow, SPECIFIC_DATA_INDEX);
QString rightProperty = sourceModel()->data(rightIndex).toString();

if(leftProperty .compare("Invalid") == 0) // put left on top if it has a specific property
    if(sortOrder() == Qt::AscendingOrder) {
        return true;
    } else {
        return false;
    }
} else if(rightProperty .compare("Invalid") == 0) { // put right on top if it has a specific property
    if(sortOrder() == Qt::AscendingOrder) {
        return false;
    } else {
        return true;
    }
}

1 个答案:

答案 0 :(得分:1)

你可以读取块中的csv,对于每个块你可以进行处理并移动到下一个块,这样你就不会在内存中加载太多。

chunksize = 10 ** 4
pieces = []
for chunk in pd.read_csv(filename, chunksize=chunksize):
    process(chunk)
    pieces.extend([chunk.groupby(['PROGRAM_NAME','TEST_GROUP'])])

您可以在here

中阅读更多内容

所有这一切都假设您一次不需要内存中的整个数据集。