代码之家  ›  专栏  ›  技术社区  ›  Philipp_Kats

dask apply:AttributeError:“DataFrame”对象没有属性“name”

  •  8
  • Philipp_Kats  · 技术社区  · 7 年前

    我有一个参数的数据帧,并对每一行应用一个函数。该函数本质上是一对sql_查询和对结果的简单计算。

    我试图利用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

    1 回复  |  直到 6 年前
        1
  •  8
  •   Jean-François Corbett    6 年前

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

    这对我很有效。