Python 使用NumPy将用户/项目评级转换为二维数组

Python 使用NumPy将用户/项目评级转换为二维数组,python,numpy,multidimensional-array,pandas,Python,Numpy,Multidimensional Array,Pandas,使用一些用户/项目/评级数据执行一些分类。我的问题是如何将这3列转换为用户(行)、项目(列)和填充矩阵的评级数据的矩阵 User Item ItemRating 1 23 3 2 204 4 1 492 2 3 23 4 等等。我尝试使用DataFrame,但得到了空错误。这是pivot,如果我理解正确,使用pandas,它将如下所示 加载数据: import pandas as pd df = pd.read_csv(fname, se

使用一些用户/项目/评级数据执行一些分类。我的问题是如何将这3列转换为用户(行)、项目(列)和填充矩阵的评级数据的矩阵

User  Item  ItemRating
1     23    3
2     204   4
1     492   2
3     23    4

等等。我尝试使用DataFrame,但得到了空错误。

这是pivot,如果我理解正确,使用pandas,它将如下所示

加载数据:

import pandas as pd
df = pd.read_csv(fname, sep='\s+', header=None)
df.columns = ['User','Item','ItemRating']
旋转它:

>>> df
   User  Item  ItemRating
0     1    23           3
1     2   204           4
2     1   492           2
3     3    23           4
>>> df.pivot(index='User', columns='Item', values='ItemRating')
Item  23   204  492
User
1       3  NaN    2
2     NaN    4  NaN
3       4  NaN  NaN
作为一个numpy示例,让我们使用
StringIO
模拟文件:

from StringIO import StringIO
data ="""1     23    3
2     204   4
1     492   2
3     23    4"""
并加载它:

>>> arr = np.genfromtxt(StringIO(data), dtype=int)
>>> arr
array([[  1,  23,  3],
       [  2, 204,  4],
       [  1, 492,  2],
       [  3,  23,  4]])
pivot基于

结果是:

>>> pivot_table
array([[ 3,  0,  2],
       [ 0,  4,  0],
       [ 4,  0,  0]])
请注意,结果不同,因为在第二种方法中,不存在的值设置为零


选择一个更适合您的;)

它现在是如何储存的?这是一个文本文件,还是某种numpy或pandas对象?我只能使用numpy执行从文本文件读取的操作。文本文件中没有标题信息。如果第一行显示的是“用户项ItemRating”,则可以使用
arr=np.genfromtxt(filname,dtype=int)
加载它,如果只想使用numpy构建整个内容(无依赖项),则可以使用
arr=np.genfromtxt(filname,skip_header=1,dtype=int)
看:太好了!再次感谢你的知识。非常感谢。呵呵,很高兴你能够解析:)@askewchan如果你是说将原始数据解析为数据帧,我每秒钟都会这样做,所以只需要参考我自己以前的答案:)我的意思是理解这个问题:p谢谢,如果我的问题陈述中有混淆,我很抱歉。我只是同时学习python和编程,在正确陈述问题陈述方面几乎没有经验。您是否需要引入任何附加插件,如panda等…如果我有文本文件,我可以只读取数据vy np.genfromtxt()?然后执行旋转?
>>> pivot_table
array([[ 3,  0,  2],
       [ 0,  4,  0],
       [ 4,  0,  0]])