【问题标题】:Drop rows based on column values in Dask根据 Dask 中的列值删除行
【发布时间】:2021-12-30 05:57:50
【问题描述】:

我正在使用dask 读取一个大的 csv 文件。我想根据一列值删除几行。如果该特定列的行值为空,我想删除整行。

我尝试使用.dropna

df = df.dropna(subset=['tier1_name'],how = 'any',axis =0)

但是,我收到了这个错误:

TypeError: dropna() got an unexpected keyword argument 'axis'

所以我改用.drop

df.drop(df['tier1_name'].isnull(), axis = 0)

但随后出现此错误:

"Drop currently only works for axis=1 or when columns is not None"
NotImplementedError: Drop currently only works for axis=1 or when columns is not None

我不明白应该使用什么来执行所需的操作。救命!

【问题讨论】:

    标签: python null rows dask drop


    【解决方案1】:

    这里的关键问题是,一般来说,dask 在没有评估的情况下不会知道行数或其内容,因此基于行的操作并不总是易于集成。

    作为一种解决方案,可以使用带有适当掩码的.loc,此伪代码可能会有所帮助:

    mask = df['tier1_name'].notna()
    df_modified = df.loc[mask]
    # note that if you need to use .isna(), then the mask value
    # should be negated
    

    【讨论】:

    • 我不明白如何使用 .loc 来帮助删除行。
    • 我试图在 isna() 中提及轴 =0。但它显示一个错误,isna() 得到了一个意外的关键字参数 'axis'
    • 我尝试更新 dask 和 pandas 的版本,但没有什么真正适合我
    • 苏丹的解决方案有效,我只是复制了它。 :) @krk,回答你的后续问题——首先,axis=0 作用于 Dask 中 支持的行,原因是 Sultan 在第一句话中提到的。接下来,.loc 不会删除行,而是创建一个包含您要保留的行的新数据框。希望这会有所帮助。
    猜你喜欢
    • 2019-07-06
    • 2015-11-14
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    相关资源
    最近更新 更多