Python 通过一次更改一列,使用Dask高效地加载和存储数据

Python 通过一次更改一列,使用Dask高效地加载和存储数据,python,pandas,csv,dask,Python,Pandas,Csv,Dask,我正在使用Dask和pandas数据帧实现csv解析器。我想让它只加载它需要的列,这样它就可以很好地工作,不需要加载大量的数据 目前,我发现的将列写入拼花地板/Dask数据帧的唯一方法是将所有数据作为pandas数据帧加载,修改列并从pandas转换 all_data=self.data_set.compute()#加载所有数据,计算到数据帧 所有_数据[列]=列_数据#修改一列 self.data_set=dd.from_pandas(所有_数据,npartitions=2)#将所有数据存储到

我正在使用Dask和pandas数据帧实现csv解析器。我想让它只加载它需要的列,这样它就可以很好地工作,不需要加载大量的数据

目前,我发现的将列写入拼花地板/Dask数据帧的唯一方法是将所有数据作为pandas数据帧加载,修改列并从pandas转换

all_data=self.data_set.compute()#加载所有数据,计算到数据帧
所有_数据[列]=列_数据#修改一列
self.data_set=dd.from_pandas(所有_数据,npartitions=2)#将所有数据存储到dask数据帧中
这似乎真的很低效,所以我正在寻找一种方法来避免加载所有数据,或者一次修改一列,或者直接写入拼花地板

我已经去掉了大部分,但这里有一个示例函数,用于规范化一列的数据

将熊猫作为pd导入
将dask.dataframe作为dd导入
def normalise_列(self、column、normalise_type=NormaliseMethod.MEAN_STDDEV):
column_data=self.data_set.compute()[column]#这也会将所有数据转换为pd数据帧
如果normalise_类型为NormaliseMethod.MIN_MAX:
[min,max]=[column\u data.min(),column\u data.max()]
列数据=列数据。应用(λx:(x-min)*(max-min))
elif normalise_类型为NormaliseMethod.MEAN_STDDEV:
[mean,std_dev]=[column_data.mean(),column_data.std()]
列数据=列数据。应用(λx:(x-平均值)/标准偏差)
all\u data=self.data\u set.compute()
所有_数据[列]=列_数据
self.data\u set=dd.from\u熊猫(所有\u数据,npartitions=2)

有人能帮我提高处理大量数据的效率吗?

由于拼花格式的二进制性质,而且压缩通常应用于列块,如果没有完整的加载过程保存周期(字节数不会保持不变),永远不可能更新文件中列的值. 至少,Dask应该使您能够在不中断内存的情况下逐个分区地执行此操作

可以编写自定义代码,以避免解析不想更改的列中的压缩二进制数据,只需重新读写,但实现这一点需要一些工作