0
我有大约2GB的数据,我想根据分析其他列的值创建一些新列。特别是我有以下代码可以在较小的数据集上正常工作,但在应用于2G(内存错误)时一直失败。使apply()函数的代码适用于2GB
是否有可能用另外一种代码代替这个代码,这样会更有效率,并且需要更少的RAM?
def calculate(row):
features = [111,222,333,444,555]
if row['C_1'] in features:
return 1
if row['C_2'] in features:
return 1
if row['C_3'] in features:
return 1
if row['C_4'] in features:
return 1
if row['C_5'] in features:
return 1
return 0
result["NEW_COL"] = result.apply (lambda row: calculate(row),axis=1)
,而不是将使用较少的内存对整个文件编写代码,为什么不能在你的数据在读[大块,所以你不超过内存限制](https://pandas-docs.github.io/pandas-docs-travis/io.html#iterating-through-files-chunk-by-chunk)? –
在2G声音的极限处发生崩溃,就像使用32位Python一样。如果您真的需要一次将所有数据存储在内存中,请尝试使用64位版本。但是,如上所述,通常更好地处理它大块 –
应该是这样吗? '读者= pd.read_table( 'tmp.sv',九月= '|',CHUNKSIZE = 4) 用于读取器块:块[ “NEW_COL”] = chunk.apply(拉姆达行:计算(行),轴= 1)'那我怎么能把所有的东西都合并成一个新的'结果'? – duckertito