我在处理这个巨大的 csv 文件(100M 行 x 14 列)时遇到了问题。
本质上,有一列'MMSI'包含唯一标识符,我想通过这一列将数据框组合在一起。我想将所有其他列聚合到列表中,所以基本上我的 groupby 结果在内存中的大小与原始数据帧几乎相同,这每次都会导致内存错误。最终,我想为每个独特的行获取每组行'MMSI'并用它们做一些事情。
我有一个想法对数据框进行排序,然后我可以找到值更改的位置并循环遍历数据框的切片,如下所示:
df = pd.read_csv(file)
df = df.sort_values(by='MMSI') #memory error
breaks = np.nonzero((df['MMSI'].diff() > 0).values)
和这个
df = pd.read_csv(file)
df.sort_values(by='MMSI', inplace=True) #memory error
breaks = np.nonzero((df['MMSI'].diff() > 0).values)
所以我有想法以块的形式读取文件并对块进行排序,然后将这些块附加在一起,并尝试保持排序。目前我能看到这样做的唯一方法是:
df1 = pd.DataFrame()
for chunk in pd.read_csv(file, chunksize=chunksize):
chunk.sort_values(by='MMSI', inplace=True)
df1 = df1.append(chunk, ignore_index=True).sort_values(by='MMSI', inplace=True)
这显然会变得越来越慢......
我试着做:
sorted(range(len(df)), key=df['MMSI'].__getitem__)
和:
df = df[df['MMSI'].argsort()] #memory error
获取排序的索引和:
mmsis = df['MMSI'].unique()
df1 = df[df['MMSI']==mmsis[0]] #memory error
以及其他一些衍生方法,所有这些方法都给我带来了记忆错误或永远无法使用……也许我只是没有足够的耐心
有没有更快的方法来对巨大的数据帧进行排序或将已经排序的数据帧附加到另一个数据帧并保持排序?
我对其他方法持开放态度..我需要通过 MMSI 以某种方式分隔数据,内存是一个大问题