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