避免在Python中使用CSV文件占用太多内存?

时间:2013-11-08 15:02:59

标签: python memory csv generator

我有100个CSV文件,它们都包含来自不同时间段的类似信息。我只需要从每个时间段中提取某些信息,而不需要将所有数据存储到内存中。

现在我正在使用看起来像的东西:

import pandas as pd
import numpy as np
import glob

average_distance = []
for files in glob.glob("*2013-Jan*"): # Here I'm only looking at one file
    data = pd.read_csv(files)

    average_distance.append(np.mean(data['DISTANCE']))
    rows = data[np.logical_or(data['CANCELLED'] == 1, data['DEP_DEL15'] == 1)]

    del data

我的问题是:是否有某种方法可以使用生成器来执行此操作,如果是这样,这会加快进程,从而让我轻松浏览100个CSV文件吗?

我认为这可能是在正确的轨道上:

def extract_info():
average_distance = []
for files in glob.glob("*20*"):
    data = pd.read_csv(files)

    average_distance.append(np.mean(data['DISTANCE']))
    rows = data[np.logical_or(data['CANCELLED'] == 1, data['DEP_DEL15'] == 1)]

    yield rows

cancelled_or_delayed = [month for month in extract_info()]

谢谢!

1 个答案:

答案 0 :(得分:0)

Pandas的read_csv方法经过高度优化:您可以提供参数,例如要读取的列和chunksize,如docs中所述。所以你的电话看起来像这样:

data = pd.read_csv(files, usecols=['Column_X', 'Column_Y'], chunksize=10000)
相关问题