我正在使用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;
}
}
答案 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
中阅读更多内容所有这一切都假设您一次不需要内存中的整个数据集。