我有一个巨大的csv,我必须为某个列中的相同参数创建一个numpy数组(类型ara大约10)但我的列表有问题:它太大而python下降了:
def mem():
file = pd.read_csv(file_csv)
x = []
y = []
path_prec = 0
for index, row in file.iterrows():
if path_prec == 0:
path_prec = row[0]
if path_prec!= row[0]:
X = np.stack(x, axis=0)
Y = np.stack(y, axis=0)
#save X and Y
x = []
y = []
path_prec = row[0]
#do some stuff and create a list
top = int(row[2])
bottom = int(row[3])
left = int(row[4])
right = int(row[5])
patch = image[top:bottom, left:right]
patch_gt = gt[top:bottom, left:right]
x.append(patch)
y.append(patch_gt)
我能管理如此庞大的数据吗?用发电机?如何?
编辑: 这个巨大的csv包含在fyle系统中查找数据的信息
答案 0 :(得分:1)
您可以创建NumPy的memmap
对象。
根据其文件,这将:
为存储在磁盘上的二进制文件中的数组创建内存映射。
内存映射文件用于访问磁盘上的大段文件,而无需将整个文件读入内存。
您可能希望手动解析CSV以迭代填充memmap
,例如使用chuncksize
选项。有关如何将chunksize
用于类似用途的代码,请参阅参考资料:loading csv column into numpy memmap (fast)
答案 1 :(得分:0)
快速天真的解决方案:每条路径都有多个numpy数组(因为我必须做的事情并不重要所以解决方案是最简单的