Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建矩阵时列索引超出范围_Python_Arrays_Pandas_Dataframe - Fatal编程技术网

Python 创建矩阵时列索引超出范围

Python 创建矩阵时列索引超出范围,python,arrays,pandas,dataframe,Python,Arrays,Pandas,Dataframe,我目前正在创建dok矩阵(不了解灵敏度矩阵)​​这是必需的)。首先,我删除所有购买少于2件物品的用户。然后我将数据帧分成测试和训练两部分,各占0.1% 现在我把它放到矩阵中,不幸的是,我得到一个错误,它是indexer:column index(98)超出范围 如何删除此错误? 数据帧 import numpy as np import pandas as pd import scipy.sparse as sp d = {'userid': [0, 0, 0, 1, 2, 2, 3, 3,

我目前正在创建dok矩阵(不了解灵敏度矩阵)​​这是必需的)。首先,我删除所有购买少于2件物品的用户。然后我将数据帧分成测试和训练两部分,各占0.1%

现在我把它放到矩阵中,不幸的是,我得到一个错误,它是indexer:column index(98)超出范围

如何删除此错误? 数据帧

import numpy as np
import pandas as pd
import scipy.sparse as sp

d = {'userid': [0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 5, 5],
     'itemid': [715, 845, 98, 12324, 85, 715, 2112, 85, 2112, 852, 102, 85, 2112, 852, 98, 652]}
df = pd.DataFrame(data=d)
print(df)
方法

def remove_purchase_cleanded(df, value):
    return df[df['userid'].map(df['userid'].value_counts()) > value].reset_index(drop=True)

df_new = remove_purchase_cleanded(df, 2)   
print(df_new) 

def splitter(df, split):
    indices = np.random.permutation(len(df))
    test_size = int(len(df) * split)
    test_indices = indices[:test_size]
    train_indices = indices[test_size:]
    return df.iloc[train_indices], df.iloc[test_indices]


def generate_matrix(df_main, dataframe):
    mat = sp.dok_matrix((df_main.shape[0], len(df_main['itemid'].unique())), dtype=np.float32)
    for userid, itemid in zip(dataframe['userid'], dataframe['itemid']):
        mat[userid, itemid] = 1.0 # here is the error
方法的调用

train, test = splitter(df_new, 0.1)

train = train.sort_values(by=['userid']).reset_index(drop=True)
test = test.sort_values(by=['userid']).reset_index(drop=True)
print(train)
print(test)

train_mat = generate_matrix(df_new, train) # here is the error

test_mat = generate_matrix(df_new, test)

# The error
IndexError: column index (98) out of range
完整数据帧

    userid  itemid
0        0     715
1        0     845
2        0      98
3        1   12324
4        2      85
5        2     715
6        3    2112
7        3      85
8        4    2112
9        4     852
10       4     102
11       5      85
12       5    2112
13       5     852
14       5      98
15       5     652
    userid  itemid
0        0     715
1        0     845
2        0      98
3        4    2112
4        4     852
5        4     102
6        5      85
7        5    2112
8        5     852
9        5      98
10       5     652
   userid  itemid
0       0     845
1       0     715
2       4     102
3       4    2112
4       4     852
5       5      98
6       5    2112
7       5      85
8       5     852
   userid  itemid
0       0      98
删除的数据帧

    userid  itemid
0        0     715
1        0     845
2        0      98
3        1   12324
4        2      85
5        2     715
6        3    2112
7        3      85
8        4    2112
9        4     852
10       4     102
11       5      85
12       5    2112
13       5     852
14       5      98
15       5     652
    userid  itemid
0        0     715
1        0     845
2        0      98
3        4    2112
4        4     852
5        4     102
6        5      85
7        5    2112
8        5     852
9        5      98
10       5     652
   userid  itemid
0       0     845
1       0     715
2       4     102
3       4    2112
4       4     852
5       5      98
6       5    2112
7       5      85
8       5     852
   userid  itemid
0       0      98
列车数据帧

    userid  itemid
0        0     715
1        0     845
2        0      98
3        1   12324
4        2      85
5        2     715
6        3    2112
7        3      85
8        4    2112
9        4     852
10       4     102
11       5      85
12       5    2112
13       5     852
14       5      98
15       5     652
    userid  itemid
0        0     715
1        0     845
2        0      98
3        4    2112
4        4     852
5        4     102
6        5      85
7        5    2112
8        5     852
9        5      98
10       5     652
   userid  itemid
0       0     845
1       0     715
2       4     102
3       4    2112
4       4     852
5       5      98
6       5    2112
7       5      85
8       5     852
   userid  itemid
0       0      98
测试数据帧

    userid  itemid
0        0     715
1        0     845
2        0      98
3        1   12324
4        2      85
5        2     715
6        3    2112
7        3      85
8        4    2112
9        4     852
10       4     102
11       5      85
12       5    2112
13       5     852
14       5      98
15       5     652
    userid  itemid
0        0     715
1        0     845
2        0      98
3        4    2112
4        4     852
5        4     102
6        5      85
7        5    2112
8        5     852
9        5      98
10       5     652
   userid  itemid
0       0     845
1       0     715
2       4     102
3       4    2112
4       4     852
5       5      98
6       5    2112
7       5      85
8       5     852
   userid  itemid
0       0      98

查看
df_main['itemid']
中的值,我看不出
len(df_main['itemid'].unique())
中的列数如何工作?也许你想要更多的东西,比如
df_main['itemid'].max()+1
?@Timus,真管用!谢谢,我是否也应该更改df_main.shape[0]?作为示例显示的值不需要它。但是:我真的不知道你在做什么,我只是从技术的角度来看。因此,我可能没有资格给出正确的答案:(查看
df_main['itemid']
中的值,我看不出
len(df_main['itemid'].unique())
中的列数如何工作?也许你想要更多的东西,比如
df_main['itemid'].max()+1
?@Timus,真管用!谢谢,我是否也应该更改df_main.shape[0]?作为示例显示的值不需要它。但是:我真的不知道你在做什么,我只是从技术的角度来看。所以我可能没有资格给出正确的答案:(