gpt4 book ai didi

python - 在 Dask 中高效删除行

转载 作者:行者123 更新时间:2023-12-01 07:34:54 26 4
gpt4 key购买 nike

我正在尝试在 dask 数据帧上删除空值,文档中的示例非常适合列:

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。另外,我正在重置索引,据我所知,这在 dask 中是一个低效的操作。

最佳答案

正如您所注意到的,Dask 的 dropna() 不支持 axis 参数从版本 2.2.0 开始。要删除列,您必须“手动”检查列是否包含 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()trivially parallelizable operation就像max()一样,所以它是高效的。

关于python - 在 Dask 中高效删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57031576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com