【发布时间】:2023-04-08 21:49:02
【问题描述】:
假设我们要对一个在column=X 周围有 40000 行的文件进行排序。让我们还假设相同的值在整个表中广泛存在,因此column=X 中具有相同值的行不仅在前 1000 行中被发现。现在,如果我们逐块读取文件并只考虑 1000 行,如果我们要围绕该列再次对表进行排序,我们可能会弄乱在 column=X 中找到的具有相同值的其他行。那么我们如何解决这个问题呢?由于没有可用数据,因此不需要代码,但我正在寻找您对此事的意见?我们是否应该通过将每个块并行地分配给合并排序算法然后重新组合结果来使用合并排序?我没有看到有办法用 pandas 做到这一点,但我不确定?
import pandas as pd
chunk_size = 1000
batch_no = 1
for chunk in pd.read_csv('data.csv', chunksize=chunk_size):
chunk.sort_values(by='X', inplace=True)
chunk.to_csv('data' +str(batch_no) + '.csv', index=False)
batch_no +=1
【问题讨论】:
-
貌似pandas的内置函数
sort_values默认使用quicksort,但是你可以指定一个参数来使用mergesort- pandas.pydata.org/pandas-docs/version/0.23.0/generated/… -
@tidakdiinginkan。谢谢。即使可以使用合并排序,使用块方法并围绕
column=X对每个块进行排序,我不确定是否有可能在column=X中具有相同值的所有行,除非我们在不分块的情况下对表进行排序,或者如果我们对行进行分组将不同块中的相同值放在一起,即我们将来自不同块的coulmn=X中具有相同值的所有行分组在一起。