简体   繁体   中英

TypeError: Cannot index by location index with a non-integer key

I am trying to re-write this code, which was written a while ago .

It has multiple chuncks, hence, I separated it into smaller pieces and re-write step by step. For instance, converting .ix to iloc , etc.

This chunk gives me an error:

#Loop through all rows, skip the user column, and fill with similarity scores
for i in range(0,len(data_sims.index)):
    for j in range(1,len(data_sims.columns)):
        user = data_sims.index[i]
        product = data_sims.columns[j]

    if data.iloc[i][j] == 1:
        data_sims.iloc[i][j] = 0
    else:
        product_top_names = data_neighbours.iloc[product][1:10]
        product_top_sims = data_ibs.iloc[product].order(ascending=False)[1:10]
        user_purchases = data_germany.iloc[user,product_top_names]

        data_sims.iloc[i][j] = getScore(user_purchases,product_top_sims)

Get an error

TypeError: Cannot index by location index with a non-integer key

I guess there is something here, which requires updating, but cannot find what exactly. I do not think it is about data. It is just about updating the code.

Appreciate any tips!

Both answers were correct - by @nosuchthingasmagic and @Quang Hoang. Managed to debug everything.

I messed up with .iloc and .loc

The problem is here:

product_top_names = data_neighbours.loc[product][1:10]
product_top_sims = data_ibs.loc[product].sort_values(ascending=False)[1:10]
user_purchases = data_germany.loc[user,product_top_names]

I'm not exactly sure what that piece of code is supposed to do (though it seems like there may be a more efficient way of doing it). Also, it looks like you are referencing j outside the j loop.

However, the specific error you're getting is mostly likely related to:

product_top_names = data_neighbours.iloc[product][1:10]

iloc only works with integers, and I guess product is a string. If that's the case, something like

product_top_names = data_neighbours[product].iloc[1:10] 

should get rid of the error (assuming product is the name of a column).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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