问题描述
我正在尝试使用 pd.cut 对连续变量(net_revenue -> 范围 -2000 到 455)进行分类。但是我得到了一个
SettingWithCopy 错误
(试图在来自 DataFrame 的切片副本上设置值。 尝试使用 .loc[row_indexer,col_indexer] = value 代替
请参阅文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy)
这是我的代码,
oct20_df_clean = pd.DataFrame()
oct20_df_clean = oct20_df[(oct20_df['tenure'] >=0) &
(oct20_df['tenure'].notnull()] ]
oct20_df_clean['bin_net_revenue'] = pd.cut(x=oct20_df_clean.loc[:,'net_revenue'],bins = [-2000,-157.56,-44.81,0.0,28.58,85.0,114.25,148.17,148.58,148.67,148.83,456],labels = ['1%','5%','10%','25%','50%','75%','90%','95%','97%','99%','100%'],precision =2
)
谢谢!
解决方法
问题不在于pd.cut
,而在于:
oct20_df_clean = oct20_df[(oct20_df['tenure'] >=0) &
(oct20_df['tenure'].notnull()]
表示 oct20_df_clean
是无法修改的 oct20_df
切片。用一个 copy
链接起来,你会很好
oct20_df_clean = oct20_df[(oct20_df['tenure'] >=0) &
(oct20_df['tenure'].notnull()
].copy()