Python 使用NumPy将用户/项目评级转换为二维数组
使用一些用户/项目/评级数据执行一些分类。我的问题是如何将这3列转换为用户(行)、项目(列)和填充矩阵的评级数据的矩阵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
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]])