该例子是有一个含user 和 movie ,我们需要删除其中打分次数小于5次的电影和用户;
思路是先按用户ID 和Movie ID 进行分组再用count对其出现次数进行计算,用
df.iterrows( )函数:可以返回所有的行索引,以及该行的所有内容,存到一个列表里,
-
for index, row in dataset.iterrows():
-
print(index,row) #index 是行索引,row 是行的值
for row in dfs.iterrows() # 可以对dataframe dfs 进行遍历,如果它的count<5 ,用 append加入dels列表,遍历dels列表Movierate=Movierate[Movierate.userId!=id1] 就可以得到打分超过5次的dataframe
Movierate = pd.read_csv("data/movieLen_small_ratings.csv")
# df1 = pd.DataFrame(columns="movieId")
# df2 = pd.DataFrame(pd.read_csv(file_path, index_col=3))
# 判断某用户打分次数是否超过5次 count,describe
# 按userId列进行分组,组长度小于5的userId在Movierate中清除
dfs = df1.groupby('userId').count()
# print(dfs)
dels = list()
for row in dfs.iterrows():
# print(row[1][0])
if int(row[1][0]) < 5:
dels.append(row[0])
# 按userId列进行分组,组长度小于5的userId在Movierate中清除
dfs1 = df1.groupby('movieId').count()
# print(dfs)
dels1 = list()
for row in dfs1.iterrows():
# print(row)
if int(row[1][0]) < 5:
dels1.append(row[0])
# print(dels1)
for id1 in dels:
Movierate=Movierate[Movierate.userId!=id1]
for id1 in dels1:
Movierate=Movierate[Movierate.movieId!=id1]
print(Movierate.head(100))
python 将dataframe 变ndarry
import pandas as pd
result = pd.DataFrame(df1, columns=['userId', 'movieId','rating'])
result1 = result.values
python 透视表是一种可以对数据动态排布并且分类汇总的表格格式,可以设置行列索引和数值
pd.pivot_table(df1,values='rating',index='userId',columns='movieId')
将Dataframe 所有Nan值转变为0
df = df.fillna(0)
将Dataframe 中count列>= 5 的保留下来 ;就是删掉小于5的
Movierate1.drop(Movierate1[Movierate1.count1 < 5].index,inplace=True)