【问题标题】:How do I change rows and columns in a dask dataframe?如何更改 dask 数据框中的行和列?
【发布时间】:2015-11-28 13:11:29
【问题描述】:

我在使用 Dask Dataframes 时遇到了一些问题。

假设我有一个包含 2 列的数据框 ['a','b']

如果我想要一个新专栏c = a + b

在熊猫中我会这样做:

df['c'] = df['a'] + df['b']

在 dask 中,我正在执行以下相同的操作:

df = df.assign(c=(df.a + df.b).compute())

是否可以用更好的方式编写这个操作,类似于我们在 pandas 中所做的?

第二个问题更让我困扰。

在 pandas 中,如果我想将第 2 行和第 6 行的 'a' 的值更改为 np.pi,我会执行以下操作

df.loc[[2,6],'a']  = np.pi

我一直无法弄清楚如何在 Dask 中进行类似的操作。我的逻辑选择了一些行,我只想更改这些行中的值。

【问题讨论】:

    标签: pandas dask


    【解决方案1】:

    编辑添加新列

    Setitem 语法现在可以在 dask.dataframe 中使用

    df['z'] = df.x + df.y
    

    旧答案:添加新列

    你说得对,setitem 语法在 dask.dataframe 中不起作用。

    df['c'] = ... # mutation not supported
    

    按照您的建议,您应该改用.assign(...)

    df = df.assign(c=df.a + df.b)
    

    在您的示例中,您对.compute() 进行了不必要的调用。通常,您只想在最后得到最终结果后才调用计算。

    更改行

    和以前一样,dask.dataframe 不支持就地更改行。就地操作很难在并行代码中进行推理。目前dask.dataframe 在这种情况下没有很好的替代操作。我已经提出了issue #653 来讨论这个话题。

    【讨论】:

    • 是否有一种惯用的方式来使用 Dask 处理更改行操作?很久以前就回答了这个问题,所以也许已经添加了支持?专门针对这种类型:ddf['c'][f] = np.nan
    • 没有。更改惰性并行数据结构中的单个行非常困难。但是,如果您有一个格式良好的索引,那么您可以考虑使用where
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多