考虑以下示例:
我有一个Movielens数据集 -
u.item.csv
ID|MOVIE NAME (YEAR)|REL.DATE|NULL|IMDB LINK|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|
1|Toy Story (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Toy%20Story%20(1995)|0|0|0|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0
2|GoldenEye (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?GoldenEye%20(1995)|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0
3|Four Rooms (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Four%20Rooms%20(1995)|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0
这里使用的分离器是Pipe,它仍然可以管理。
training_data.csv
,user_id,movie_id,rating,unix_timestamp
0,1,1,5,874965758
1,1,2,3,876893171
2,1,3,4,878542960
因为我需要在" Training_data"中显示电影名称,而不是"电影ID"我需要将 u.item.csv 的每个ID与带有 training_data.csv 的movie_id匹配,然后将其替换。
我正在使用Python Pandas,并且训练数据已从Sframe转换为Dataframe转换为CSV。这样我就可以获得所需的更改,但这种更改尚未成功。我当然可以使用一些循环结构,但匹配和替换是我面临的真正挑战。
P.S。我知道训练数据将按用户顺序排列,并且如果被替换将产生确切的输出,但我需要学习这一点,以便当我推荐电影时,我需要MOVIE名称来显示而不是ID。
我已经尝试了
答案 0 :(得分:0)
我认为您需要在map
创建的Series
之前set_index
:
print (df1.set_index('ID')['MOVIE NAME (YEAR)'])
ID
1 Toy Story (1995)
2 GoldenEye (1995)
3 Four Rooms (1995)
Name: MOVIE NAME (YEAR), dtype: object
df2['movie_id'] = df2['movie_id'].map(df1.set_index('ID')['MOVIE NAME (YEAR)'])
print (df2)
user_id movie_id rating unix_timestamp
0 1 Toy Story (1995) 5 874965758
1 1 GoldenEye (1995) 3 876893171
2 1 Four Rooms (1995) 4 878542960
或使用replace
:
df2['movie_id'] = df2['movie_id'].replace(df1.set_index('ID')['MOVIE NAME (YEAR)'])
print (df2)
user_id movie_id rating unix_timestamp
0 1 Toy Story (1995) 5 874965758
1 1 GoldenEye (1995) 3 876893171
2 1 Four Rooms (1995) 4 878542960
差异如果不匹配,map
创建NaN
并替换let原始值:
print (df2)
user_id movie_id rating unix_timestamp
0 1 1 5 874965758
1 1 2 3 876893171
2 1 5 4 878542960 <- 5 not match
df2['movie_id'] = df2['movie_id'].map(df1.set_index('ID')['MOVIE NAME (YEAR)'])
print (df2)
user_id movie_id rating unix_timestamp
0 1 Toy Story (1995) 5 874965758
1 1 GoldenEye (1995) 3 876893171
2 1 NaN 4 878542960
df2['movie_id'] = df2['movie_id'].replace(df1.set_index('ID')['MOVIE NAME (YEAR)'])
print (df2)
user_id movie_id rating unix_timestamp
0 1 Toy Story (1995) 5 874965758
1 1 GoldenEye (1995) 3 876893171
2 1 5 4 878542960