简体   繁体   English

类型错误:'bool' 对象不可下标 Python 3

[英]TypeError: 'bool' object is not subscriptable Python 3

I get the following error:我收到以下错误:

TypeError                                 Traceback (most recent call last)
C:\Users\levanim\Desktop\Levani Predictive\cosinesimilarity1.py in <module>()
     39 
     40 for i in meowmix_nearest_neighbors.index:
---> 41     top_ten = pd.DataFrame(similarity_matrix.ix[i,]).sort([i], 
ascending=False[1:6]).index.values
     42     meowmix_nearest_neighbors.ix[i,:] = top_ten
     43 
TypeError: 'bool' object is not subscriptable 

for the following code.对于以下代码。 I'm new to Python and can't quite put my finger on how I have to change the syntax(if its a syntax python 3 problem).我是 Python 的新手,不能完全确定我必须如何更改语法(如果是语法 python 3 问题)。 Anybody encounter this?有人遇到这个吗? I think it's to do with the ascending=False[1:6] portion and have spent some time banging my head against the wall.我认为这与上升=False[1:6] 部分有关,并且花了一些时间将我的头撞在墙上。 Hoping it's a simple fix but don't know enough希望这是一个简单的修复,但还不够了解

import numpy as np
import pandas as pd
from scipy.spatial.distance import cosine


enrollments = pd.read_csv(r'C:\Users\levanim\Desktop\Levani 
Predictive\smallsample.csv')

meowmix = enrollments.fillna(0)

meowmix.ix[0:5,0:5]

def getCosine(x,y) :
    cosine = np.sum(x*y) / (np.sqrt(np.sum(x*x)) * np.sqrt(np.sum(y*y)))
    return cosine

print("done creating cosine function")

similarity_matrix = pd.DataFrame(index=meowmix.columns, 
columns=meowmix.columns)
similarity_matrix = similarity_matrix.fillna(np.nan)

similarity_matrix.ix[0:5,0:5]
print("done creating a matrix placeholder")


for i in similarity_matrix.columns:
    for j in similarity_matrix.columns:
        similarity_matrix.ix[i,j] = getCosine(meowmix[i].values, 
meowmix[j].values)

print("done looping through each column and filling in placeholder with 
cosine similarities")


meowmix_nearest_neighbors = pd.DataFrame(index=meowmix.columns,
                                        columns=['top_'+str(i+1) for i in 
range(5)])

meowmix_nearest_neighbors = meowmix_nearest_neighbors.fillna(np.nan)

print("done creating a nearest neighbor placeholder for each item")


for i in meowmix_nearest_neighbors.index:
    top_ten = pd.DataFrame(similarity_matrix.ix[i,]).sort([i], 
ascending=False[1:6]).index.values
    meowmix_nearest_neighbors.ix[i,:] = top_ten

print("done creating the top 5 neighbors for each item")

meowmix_nearest_neighbors.head()

Instead of而不是

    top_ten = pd.DataFrame(similarity_matrix.ix[i,]).sort([i], 
ascending=False[1:6]).index.values

use使用

    top_ten = pd.DataFrame(similarity_matrix.ix[i,]).sort([i], 
ascending=False), [1:6]).index.values

(ie insert ), just after the False .) (即插入),就在False 。)

False is the value of the sort() method parameter with meaning "not in ascending order", ie requiring the descending one. Falsesort()方法参数的值,意思是“不按升序排列”,即需要降序 So you need to terminate the sort() method parameter list with ) and then delimit the 1st parameter of the DataFrame constructor from the 2nd one with , .所以,你需要终止sort()与方法参数列表) ,然后划定的第一个参数DataFrame第二一个与构造,

[1:6] is the second parameter of the DataFrame constructor (the index to use for resulting frame) [1:6]是 DataFrame 构造函数的第二个参数(用于结果帧的索引)

Yeah, you can't do False[1:6] - False is a bool ean, meaning it can only be one of two things ( False or True )是的,你不能做False[1:6] - False是一个bool ,这意味着它只能是两件事之一( FalseTrue

Just change it to False and your problem will be solved.只需将其更改为False解决您的问题。

the [1:6] construct is for working with list s. [1:6]构造用于处理list s。 So if you had, for example:所以如果你有,例如:

theList = [ "a","b","c","d","e","f","g","h","i","j","k","l" ] 

print theList      # (prints the whole list)
print theList[1]   # "b"    
print theList[1:6] # ['b', 'c', 'd', 'e', 'f']

In python, this is called "slicing", and can be quite useful.在 Python 中,这称为“切片”,并且非常有用。

You can also do things like:您还可以执行以下操作:

print theList[6:] # everything in the list after "f" 
print theList[:6] # everything in the list before "f", but including f

I encourage you to play with this using Jupyter Notebook - and of course, read the documentation我鼓励你使用Jupyter Notebook来玩这个——当然,阅读文档

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM