Python 熊猫:读取csv和数据透视

Python 熊猫:读取csv和数据透视,python,python-3.x,pandas,csv,dataframe,Python,Python 3.x,Pandas,Csv,Dataframe,我试图从一个文件中创建一个pandas数据帧,该文件的格式类似于逗号分隔值,但没有一行作为标题。在每一行上,文件都包含一个用户ID、一个电影ID以及相应用户对相应电影的评级。我想把它转换成一个数据帧,y轴有电影ID,x轴有用户ID,每个“单元格”中的值都是额定值。我该怎么做?到目前为止,我所看到的一切都只允许我在直接从逗号分隔值读取数据帧时设置y轴,而不是x轴 数据格式:(时间是最后一个,我可以省略它,因为它的目的是计算用户之间评分的相似性 1 1 5 874965758 1

我试图从一个文件中创建一个pandas数据帧,该文件的格式类似于逗号分隔值,但没有一行作为标题。在每一行上,文件都包含一个用户ID、一个电影ID以及相应用户对相应电影的评级。我想把它转换成一个数据帧,y轴有电影ID,x轴有用户ID,每个“单元格”中的值都是额定值。我该怎么做?到目前为止,我所看到的一切都只允许我在直接从逗号分隔值读取数据帧时设置y轴,而不是x轴

数据格式:(时间是最后一个,我可以省略它,因为它的目的是计算用户之间评分的相似性

1   1   5   874965758  
1   2   3   876893171  
1   3   4   878542960  
1   4   3   876893119  
1   5   3   889751712  
1   7   4   875071561  
1   8   1   875072484  
1   9   5   878543541  
1   11  2   875072262  
1   13  5   875071805  
这是通过以下途径实现的一种方式:


另一种选择是使用多级索引(带有或在读取csv期间),然后使用它

import pandas as pd, numpy as np
from io import StringIO

mystr = StringIO("""1   1   5   874965758  
1   2   3   876893171  
1   3   4   878542960  
1   4   3   876893119  
1   5   3   889751712  
1   7   4   875071561  
2   2   1   875072484  
2   3   5   878543541  
2   4  2   875072262  
2   5  5   875071805  """)

# read csv file, replace mystr with 'file.csv'
df = pd.read_csv(mystr, delim_whitespace=True, header=None,
                 usecols=[0, 1, 2], names=['user', 'movie', 'rating'])

# restructure dataframe via pivot_table
res = df.pivot_table(index='movie', columns='user', values='rating',
                     fill_value=0, aggfunc=np.mean)

print(res)

# user   1  2
# movie      
# 1      5  0
# 2      3  1
# 3      4  5
# 4      3  2
# 5      3  5
# 7      4  0
df = pd.read_csv('ratings.csv') # Assumes there are column headers.
df.set_index(keys=['movieID','userID']).unstack()