我正在尝试在简单的数据帧上删除null值,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()
但是它看起来不是pythonic。 另外,我正在重置索引,据我所知,这是一项效率低下的操作。
答案 0 :(得分:1)
您已经注意到,从2.2.0版开始,Dask的dropna()
不支持axis参数。要删除列,您必须“手动”检查该库是否包含Nan
s,如果有,则将其删除:
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()
一样是trivially parallelizable operation,因此效率很高。