首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Population必须是序列或集合。对于字典,使用list(d)

Population必须是序列或集合。对于字典,使用list(d)
EN

Stack Overflow用户
提问于 2017-06-05 23:21:19
回答 1查看 23K关注 0票数 5

我试着执行这个代码,我得到了下面的错误,我在随机函数中得到了错误,我不知道如何修复它,请帮助我。

代码语言:javascript
复制
def load_data(sample_split=0.3, usage='Training', to_cat=True, verbose=True,
          classes=['Angry','Happy'], filepath='C:/Users/Oussama/Desktop/fer2013.csv'):
    df = pd.read_csv(filepath)
    # print df.tail()
    # print df.Usage.value_counts()
    df = df[df.Usage == usage]
    frames = []
    classes.append('Disgust')
    for _class in classes:
        class_df = df[df['emotion'] == emotion[_class]]
        frames.append(class_df)
    data = pd.concat(frames, axis=0)
    rows = random.sample(data.index, int(len(data)*sample_split))
    data = data.ix[rows]
    print ('{} set for {}: {}'.format(usage, classes, data.shape))
    data['pixels'] = data.pixels.apply(lambda x: reconstruct(x))
    x = np.array([mat for mat in data.pixels]) # (n_samples, img_width, img_height)
    X_train = x.reshape(-1, 1, x.shape[1], x.shape[2])
    y_train, new_dict = emotion_count(data.emotion, classes, verbose)
    print (new_dict)
    if to_cat:
        y_train = to_categorical(y_train)
    return X_train, y_train, new_dict

我明白了:

代码语言:javascript
复制
Traceback (most recent call last):
   File "fer2013datagen.py", line 71, in <module>
   verbose=True)
   File "fer2013datagen.py", line 47, in load_data
   rows = random.sample(data, int(len(data)*sample_split))

   File"
   C:\Users\Oussama\AppData\Local\Programs\Python\Python35\lib\random.py",
   line 311, in sample
   raise TypeError("Population must be a sequence or set.  For dicts, use
   list(d).")
TypeError: Population must be a sequence or set.  For dicts, use list(d).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-05 23:39:28

你的代码如下:

代码语言:javascript
复制
rows = random.sample(data.index, int(len(data)*sample_split))

但是,错误消息显示

代码语言:javascript
复制
rows = random.sample(data, int(len(data)*sample_split))

为什么不同?你修改它了吗?data的类型是什么?这是一个列表吗?还是一本字典?

而且,错误消息已经告诉您如何修复它。表示random.sample的第一个参数必须是序列或集合。对于dicts,请使用list(Dict)。

例如,

代码语言:javascript
复制
d = {'a':1,'b':2}
random.sample(list(d), 1)

而不是

代码语言:javascript
复制
random.sample(d, 1)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44372231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档