python - 熊猫尝试改用 .loc[row_indexer,col_indexer] = value
问题描述
这是我的例子
data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
data = pd.DataFrame(data)
data.head()
执行此操作时,我从 pandas 库收到警告
from sklearn.model_selection import train_test_split
train_new, val_new = train_test_split(data, test_size=0.2)
col = 'Team'
means = data.groupby(col)['Points'].mean()
train_new[col + '_mean_target'] = train_new[col].map(means)
train_new.head()
这是警告
SettingWithCopyWarning:试图在 DataFrame 中的切片副本上设置值。尝试改用 .loc[row_indexer,col_indexer] = value
当我使用 .loc
col = 'Team'
means = data.groupby(col)['Points'].mean()
train_new.loc[:,col + '_mean_target'] = train_new.loc[:,col].map(means)
train_new.head()
它显示了相同的确切警告,那么代码有什么问题?
解决方案
另一种方法是禁用链式分配,它可以在您的代码上运行而无需创建副本:
# disable chained assignments
pd.options.mode.chained_assignment = None
这是这个相关问题的答案(不会说这是一个重复的问题) - Pandas DataFrame: SettingWithCopyWarning: A value is trying to be set on a slice of a slice from DataFrame
推荐阅读
- javascript - TypeError:无法通过使用 Fetch 和 Const 读取未定义的属性“0”
- java - HtmlUnit 在无效的 javascript 上失败,可以在客户端更正吗?
- java - Spring Integration 关于如何为多个变量组合两个路径
- reactjs - IONIC 3 中用于聊天应用程序的 Voxeet API
- reactive-programming - 使用 UI 控件过滤 RxSwift/RxCocoa 中的反应数据集
- python - 覆盖 Google OR-tools 中的约束
- .htaccess - 服务器遇到内部错误或配置错误
- android - 禁止使用多个可变参数
- java - ScreenRecorder:如何在服务或 IntentService 中使用 createScreenCaptureIntent()?
- python - 如何在字典中解析电影脚本