Python 如何将数据读取到dask数据帧并删除坏行

Python 如何将数据读取到dask数据帧并删除坏行,python,pandas,bigdata,data-science,dask,Python,Pandas,Bigdata,Data Science,Dask,我正在尝试使用dask聚合一个包含多行错误数据的大型(66gb)数据库 由于dask没有删除坏线功能,我首先读取所有数据作为数据帧,并删除坏线。然后我将其转换为dask数据帧。我的代码如下: 将dask.dataframe作为dd导入 作为pd进口熊猫 从dask.distributed导入客户端 #Groups the average Thresholds by NEATGeneration and finds the mean, standard deviation, minimum and

我正在尝试使用dask聚合一个包含多行错误数据的大型(66gb)数据库

由于dask没有删除坏线功能,我首先读取所有数据作为数据帧,并删除坏线。然后我将其转换为dask数据帧。我的代码如下:

将dask.dataframe作为dd导入 作为pd进口熊猫 从dask.distributed导入客户端

#Groups the average Thresholds by NEATGeneration and finds the mean, standard deviation, minimum and maximum of the data
def group(df):
    res = df.groupby(df["NEATGeneration"]).agg({'averageThreshold': ['mean', 'std','max','min']}).compute()
    return res


if __name__ == '__main__':

   Client(n_workers=4, threads_per_worker=6,memory_limit='120GB')

   #Loads in the data as a pandas datframe inlcuding bad lines
   df = dd.read_csv("agentsvfitness.txt",error_bad_lines=False,usecols=["NEATGeneration","averageThreshold"])

   #Replaces elements in  the averageThreshold column that are not numeric with NA
   pd.to_numeric(df['averageThreshold'] , errors ='coerce') 

   #Removes rows with NA
   df = df.dropna()

   #runs the group() function in parallel
   df = group(df)

   #Sets all column names and prepares data for writing to csv
   df.columns = ['mean', 'std','max','min']

   #Writes aggregated data to a single csv file
   df.to_csv("averageThreshold.csv")
我遇到的问题是,数据以以下方式(粗体)被错误记录:

新一代、平均适合度、平均资源消耗、平均阈值

0,8.32,0.8533333334,0.48199999999

0,8.4866666,1.7266666666.47333333333#缺失“,0”

0,8.0533331.84666667,0.4500000000000001#缺少“,”

0,8.3066667,1.94666668,0.44933131583851454


在将数据读入dask数据帧时,我当前的方法无法删除这些行。有没有办法从已经存在的数据帧中删除这些坏行?还有没有办法只读取“良好”数据(数据点数量正确的数据)?我在一个拥有24个CPU和120GB内存的集群上运行。

我猜有一些
read\u csv
关键字组合可以解决您的问题,但我对它们不是很熟悉,所以我建议另一种方法


您可以使用Dask包将文本行作为文本而不是数据帧来读取。然后,您可以使用Python函数过滤掉不好的行(可能是通过计算逗号或其他数字),然后您可以将其写回文本文件,然后使用Dask Dataframe重新读取,因为数据已经清理了一点。也许还有一种很好的方法可以将Dask包转换为Dask数据帧,而无需将中间文件写入磁盘,但这可能会稍微复杂一些。

我猜有一些组合的
读取csv
关键字可以解决您的问题,但我对它们不是很熟悉,因此,我将建议一种替代方法


您可以使用Dask包将文本行作为文本而不是数据帧来读取。然后,您可以使用Python函数过滤掉不好的行(可能是通过计算逗号或其他数字),然后您可以将其写回文本文件,然后使用Dask Dataframe重新读取,因为数据已经清理了一点。可能还有一些很好的方法可以将Dask包转换为Dask数据帧,而无需将中间文件写入磁盘,但这可能会稍微复杂一些。

我不确定是否理解,为什么您不能将csv读取到Dask
df=dd.read\u csv(“agentsvfitness.txt”,error\u bad\u lines=False)
将err\u bad\u lines设置为False将删除不正确的lines@effy好的,我已经使用了
dd.read\u csv(“agentsvfitness.txt”,error\u bad\u lines=False)
并对我的代码进行了轻微的编辑以反映这一点。即使这样,数据帧中的行仍然被读取,因为这些行的元素太少,导致groupby崩溃。我不知道我是否理解,为什么您不能将csv读取到dask
df=dd.read\u csv(“agentsvfitness.txt”,error\u bad\u lines=False)
将err\u bad\u lines设置为False将删除不正确的lines@effy好的,我已经使用了
dd.read\u csv(“agentsvfitness.txt”,error\u bad\u lines=False)
并对我的代码进行了轻微的编辑以反映这一点。即使这样,仍会将元素太少的行读入数据帧,这会导致groupby崩溃。