【问题标题】:dask apply: AttributeError: 'DataFrame' object has no attribute 'name'dask apply:AttributeError:'DataFrame'对象没有属性'name'
【发布时间】:2017-10-13 19:53:02
【问题描述】:

我有一个参数数据框,并对每一行应用一个函数。这个函数本质上是几个 sql_queries 和对结果的简单计算。

我正在尝试利用 Dask 的多处理功能,同时保持结构和 ~ 界面。下面的示例有效,并且确实有显着的提升:

def get_metrics(row):

    record = {'areaName': row['name'],
              'areaType': row.area_type,
              'borough': row.Borough,
              'fullDate': row['start'],
              'yearMonth': row['start'],
              }


    Q = Qsi.format(unittypes=At,
                   start_date=row['start'],
                   end_date=row['end'],
                   freq='Q',
                   area_ids=row['descendent_ids'])

    sales = _get_DF(Q)
    record['salesInventory'] = len(sales)
    record['medianAskingPrice'] = sales.price.median()
    R.append(record)

R = []
x = ddf.map_partition(lambda x: x.apply(_metric, axis=1), meta={'result': None})
    x.compute()

result2 = pd.DataFrame(R)

但是,当我尝试改用 .apply 方法时(见下文),它会抛出我 'DataFrame' object has no attribute 'name'...

R = list()
y = ddf.apply(_metrics, axis=1, meta={'result': None})

然而,ddf.head() 显示数据框中有一个 name

【问题讨论】:

  • 您写了dask_DF.apply(),但说ddf 有一个名称列。试试ddf.apply()
  • 谢谢,但这只是(已解决)拼写错误,因为我试图在这里简化代码。与问题无关
  • 接受的答案也适用于我。但问题中的代码示例过于复杂,大部分代码与问题无关。

标签: python dask


【解决方案1】:

如果你的_metric 函数的输出是一个系列,也许你应该使用meta=('your series's columns name','output's dtype')

这对我有用。

【讨论】:

  • 您能解释一下为什么在这里使用元组会有所不同吗?这在文档中并不明显。
  • 对不起,我已经快2年没用dask了,我猜meta参数告诉dask你要使用的部分和输出类型,可能是因为如果你不设置dtype,dask可能会推断出错误 dtpye
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2021-12-25
  • 2020-04-14
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多