我在尝试使用我创建的函数在pandas数据框架上创建新列时获取SettingWithCopyWarning,以返回该新列的值。我正在使用movielens数据集并预测电影上用户的评分。
这是我的数据框的一个例子:
现在,如果我想添加一个名为' prediction'将user_id和item_id发送到我的函数并返回预测我已经遵循了另一个question的建议
因此使用代码:
df['pred'] = df.apply(lambda x: predict_rating(x['user_id'], x['item_id']), axis =1)
然而,我一直在接受SettingWithCopyWarning。
:44:SettingWithCopyWarning: 尝试在DataFrame的切片副本上设置值。 尝试使用.loc [row_indexer,col_indexer] = value 请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
欢迎任何建议。
答案 0 :(得分:0)
这样做,
df.loc [:,' pred'] = df.apply(lambda x:predict_rating(x [' user_id'],x [' item_id' ]),轴= 1)
答案 1 :(得分:0)
这个最小的例子对我有用:
import pandas as pd
df = pd.DataFrame({'user_id':[22,224], 'item_id': [377,29], 'rating': [1,3]})
def prediction_func(row):
return row['user_id'] + row['item_id']
df['prediction'] = df.apply(prediction_func, axis=1)
print(df.head())
输出:
item_id rating user_id prediction
0 377 1 22 399
1 29 3 224 253
答案 2 :(得分:0)
我认为这毕竟与我的功能有关,所以我会深入研究并报告任何有趣的事情。