使用 pandas.cut 分箱连续变量

问题描述

我正在尝试使用 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()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...