在 Dask 中有效地删除行



我正在尝试在 dask 数据帧上删除空值,documentaton 中的示例适用于列:

import dask.dataframe as dd
df = dd.read_csv("test.csv",assume_missing=True)
df.dropna(how='all', subset=None, thresh=None).compute()

但是,如果我尝试指定轴 0 以便按行过滤,则会出现此错误:

import dask.dataframe as dd
df = dd.read_csv("test.csv",assume_missing=True)
df.dropna(how='all', subset=None, thresh=None,axis=0).compute()

该文件还说:

axis:{0 or ‘index’, 1 or ‘columns’}, default 0 (Not supported in Dask)

所以我写这个作为一个走动:

df = dd.read_csv("test.csv",assume_missing=True)
filter_ = ~(df.isnull().all(axis=1).reset_index()[0])
df.loc[filter_].compute()

但它看起来并不蟒蛇。另外,我正在重置索引,据我所知,这是 dask 中的低效操作。

正如您所注意到的,从 2.2.0 版开始,Dask 的 dropna() 不支持轴参数。要删除列,您必须"手动"检查列是否包含Nan如果是,则删除它:

对于how = 'any'

df.drop([c for c in df.columns if df[c].isna().any().compute()], axis = 1)

对于how = 'all'

df.drop([c for c in df.columns if df[c].isna().all().compute()], axis = 1)

虽然在示例中没有明确列出,但isna()是一个像max()一样的可并行化操作,因此它是有效的。

最新更新