pandas chunksize - 在循环内外连接

时间:2015-03-18 09:39:25

标签: python pandas

我必须阅读大量的csv文件(5亿行),并尝试使用chunksize方法用pandas读取它们,以减少内存消耗。但我并不了解concat方法的行为以及读取所有文件和减少内存的选项。为了解释到目前为止我做了什么,我添加了一些伪代码。

让我们说我正在阅读,然后用n行连接一个文件:

iter_csv = pd.read_csv(file.csv,chunksize=n/2)
df = pd.concat([chunk for chunk in iter_csv])

然后我必须将一个函数应用于数据框,以根据某些值创建一个新列:

df['newcl'] = df.apply(function)

一切都很顺利。 但现在我想知道上述程序与以下程序之间的区别是什么:

iter_csv = pd.read_csv(file.csv,chunksize=n/2)
for chunk in iter_csv:
    chunk['newcl'] = chunk.apply(function)
    df = pd.concat([chunk])

就RAM消耗而言,我认为第二种方法应该更好,因为它只将函数应用于块而不是整个数据帧。但是会出现以下问题:

  1. df = pd.concat([chunk])放入循环中会返回一个大小为n / 2(块大小)的数据帧,而不是完整的数据帧;
  2. df = pd.concat([chunk])放在外面,循环后返回相同的n / 2数据帧长度。
  3. 所以我怀疑第一种方法(在read_csv函数之后连接数据帧)是否是最好的方法,平衡速度和RAM消耗。而且我也想知道如何使用for循环来连接块。

    感谢您的支持。

0 个答案:

没有答案