Dask:AttributeError:'DataFrame'对象没有属性'_getitem_array'

时间:2019-07-31 13:20:46

标签: python-3.x pandas amazon-web-services dask amazon-sagemaker

我想使用S3存储桶上的一些数据。

我使用以下命令导入了它:

import boto3
import dask.dataframe as dd

def import_df(key):
        s3 = boto3.client('s3')
        df = dd.read_csv('s3://.../' + key ,encoding='latin1')
        return df

key = 'Churn/CLEANED_data/file.csv'
train = import_df(key)

我可以看到使用以下命令正确导入了数据

train.head()

但是当我尝试简单操作(taken from this dask doc)时:

train_churn = train[train['CON_CHURN_DECLARATION'] == 1]
train_churn.compute()

我遇到了错误:

  

AttributeError跟踪(最近的调用)   最后)在()

     

1 train_churn = train [train ['CON_CHURN_DECLARATION'] == 1]

     

----> 2 train_churn.compute()

     

〜/ anaconda3 / envs / python3 / lib / python3.6 / site-packages / dask / base.py在   计算(自我,**变形)       152 dask.base.compute       153“”“   -> 154(结果,)=计算(自身,遍历=假,**假)       155返回结果       156

     

AttributeError:“ DataFrame”对象没有属性“ _getitem_array”

此处是完整错误:Error Upload

4 个答案:

答案 0 :(得分:0)

如果是'CON_CHURN_DECLARATION'上的逐行选择,则您应该可以使用以下数据过滤数据框:

train_churn = train[train.CON_CHURN_DECLARATION==1]

答案 1 :(得分:0)

当尝试读取s3文件时,我遇到了类似的问题,最终通过将dask更新到最新版本(我认为默认情况下以默认值开头的一个sagemaker实例已弃用)解决了

(从笔记本电脑)安装/升级软件包和依赖项

<?php

class User extends Authenticatable
{
    public function isAuthorized($object, $operation)
    {
        // You are checking if the current user has access to $operation method
        // on $object. E.g. App\Http\Controllers\UserController@viewAny.

        // This will output a query LIKE this:
        // SELECT COUNT(`rp`.`id`)
        // FROM role_permissions rp
        // INNER JOIN user_roles ur ON ur.role_id = rp.role_id
        // WHERE `object` = 'App\\Http\\Controllers\\UserController'
        // AND `operation` = 'viewAny'
        // AND `ur`.`user_id` = 1;
        // And then it will check if the value > 0.
        return Db::table('role_permissions')
            ->where('object', $object)
            ->where('operation', $operation)
            ->join('user_roles', 'user_roles.role_id', '=', 'role_permissions.role_id')
            ->where('user_roles.user_id', $this->id)
            ->exists();
    }
}

希望这会有所帮助!

答案 2 :(得分:0)

您可能有旧版本的dask。安装版本2.13.0可以为我解决此问题。

答案 3 :(得分:0)

我对dask(版本2.14.0)有相同的问题。重新安装dask解决了我的问题。我相信以前安装的版本一定有问题。