如果我有一个太大无法使用pandas(在这种情况下是35GB)将其加载到内存中的csv文件,我知道可以通过使用chunksize对文件进行分块处理。
但是我想知道是否可以根据一列中的值更改chunksize。
我有一个ID列,然后每个ID都有几行信息,就像这样:
ID, Time, x, y
sasd, 10:12, 1, 3
sasd, 10:14, 1, 4
sasd, 10:32, 1, 2
cgfb, 10:02, 1, 6
cgfb, 10:13, 1, 3
aenr, 11:54, 2, 5
tory, 10:27, 1, 3
tory, 10:48, 3, 5
ect...
我不想将ID分成不同的块。例如,大小为4的块将被处理:
ID, Time, x, y
sasd, 10:12, 1, 3
sasd, 10:14, 1, 4
sasd, 10:32, 1, 2
cgfb, 10:02, 1, 6
cgfb, 10:13, 1, 3 <--this extra line is included in the 4 chunk
ID, Time, x, y
aenr, 11:54, 2, 5
tory, 10:27, 1, 3
tory, 10:48, 3, 5
...
这可行吗?
如果不行,也许可以使用csv库,并使用类似以下代码的for循环遍历:
for line in file:
x += 1
if x > 1000000 and curid != line[0]:
break
curid = line[0]
#code to append line to a dataframe
尽管我知道这只会创建一个块,并且for循环需要很长时间来处理。
SELECT * FROM ... WHERE ID == BLAH
),为每个唯一的ID值创建不同的文件。 - blacksitechunksize
,流式传输整个35GB文件,并为每个唯一的ID值(set(df['ID'])
)创建一个单独的CSV文件。然后,对于您较大文件中的每一行,将该行写入(即追加)到对应于该行ID的现有ID文件中?虽然我对它可能需要多长时间持怀疑态度,但编码不会太难......只是一个想法!否则,恐怕我无法提供更多帮助了。 - blacksite