[英]How to transform dataframe to dict in Python3
我一直在網上搜索很長時間,但無濟於事。 請幫助或嘗試提供一些如何實現這一點的想法
我用pandas來讀取MovieLens csv文件
ratings = pd.read_table('ml-latest-small/ratings.csv')
然后我得到一個這樣的表:
userId movieId rating timestamp
1 31 2.5 1260759144
1 1029 3.0 1260759179
1 1061 3.0 1260759182
1 1129 2.0 1260759185
1 1172 4.0 1260759205
2 31 3.0 1260759134
2 1111 4.5 1260759256
我想把它改成像dict一樣
{userId:{movieId:rating}}
例如
{
1:{31:2.5,1029:3.0,1061,3.0,1129:2.0,1172:4.0},
2:{31:3.0,1111:4.5}
}
我嘗試了這段代碼,但失敗了:
for user in ratings['userId']:
for movieid in ratings['movieId']:
di_rating.setdefault(user,{})
di_rating[user][movieid]=ratings['rating'][ratings['userId'] == user][ratings['movieId'] == movieid]
有人可以幫幫我嗎?
d = df.groupby('userId').apply(lambda y: {int(x.movieId): x.rating for i, x in y.iterrows()})
.to_dict()
print (d)
{
1: {1129: 2.0, 1061: 3.0, 1172: 4.0, 1029: 3.0, 31: 2.5},
2: {1111: 4.5, 31: 3.0}
}
刪除答案的另一個解決方案
d1 = df.groupby('userId').apply(lambda x: dict(zip(x['movieId'], x['rating']))).to_dict()
print (d1)
{
1: {1129: 2.0, 1061: 3.0, 1172: 4.0, 1029: 3.0, 31: 2.5},
2: {1111: 4.5, 31: 3.0}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.