我正在处理一个较大的顺序数据集,其长度可能会有所不同。
当前使用pd.read_csv(series_file, skiprows=..., nrows=...)
,它适用于小型数据集,但是当 skiprows 参数变大时变得发疯了。
有什么方法可以处理大数据并跟踪以前的csv搜索会话?使用 chunksize 似乎是一个很好的解决方案,但不适用于其他大小的数据。
答案 0 :(得分:0)
使用Python 3.7我看不到任何问题。我试图跳过100,000行
-vf pad="width=ceil(iw/2)*2:height=ceil(ih/2)*2"
答案 1 :(得分:0)
确保块大小大于max seq len。由于需要使用填充,因此无论如何都需要对其进行计算。
保留最后一个seq组并将其附加到下一个批处理中的第一个,或者仅与该批处理合并
我的最终解决方案是:
class PreSeqDataset(Dataset):
def __init__(self, max_seq_len, ch_size, series_file):
self.max_seq_len = max_seq_len
self.series_file = series_file
self.ch_size = ch_size
def process_series_batch(self, series):
...
return series
def __iter__(self):
last_batch = None
for chunk in pd.read_csv(self.series_file, chunksize=self.ch_size):
series_batch = None
ids = chunk['object_id'].unique()
if last_batch is not None:
if last_batch[0] in ids:
chunk = chunk.append(last_batch[1])
else:
ids = list(ids)
ids.insert(0, last_batch[0])
series_batch = self.process_series_batch(last_batch[1])
for i in ids[:-1]:
series = chunk.loc[chunk[chunk.columns[0]] == i]
series = self.process_series_batch(series)
if series_batch is None:
series_batch = series
else:
series_batch = torch.cat((series_batch, series))
last_batch = (ids[-1], chunk.loc[chunk[chunk.columns[0]] == ids[-1]])
series_batch = series_batch.to(device)
yield ids[:-1], series_batch