pandas DataFrame新增rank列触发切片拷贝警告如何解决?
警告触发原因
你用布尔索引从原DataFrame筛选得到min_100k_volume_df时,Pandas无法确定这个对象是原DataFrame的视图还是独立副本,当你尝试直接对它赋值新列时,就会触发这个链式赋值警告,避免你无意间修改原DataFrame或者修改不生效。
解决方法
只需要在筛选数据时明确调用.copy(),声明你需要的是独立于原DataFrame的新副本即可,修改后的代码如下:
filter_condition = ohlcv_m30_groupby_df['min_volume'] > cutoff_volume # 新增.copy()明确生成独立副本 min_100k_volume_df = ohlcv_m30_groupby_df[filter_condition].copy() min_100k_volume_df.loc[:,'volume_rank'] = min_100k_volume_df['total_volume'].rank(ascending = False).astype(int) print(min_100k_volume_df)
补充说明
- 如果你后续不需要对原
ohlcv_m30_groupby_df做其他操作,也可以直接把筛选逻辑和排名逻辑合并,不需要生成中间变量:
min_100k_volume_df = ohlcv_m30_groupby_df[ohlcv_m30_groupby_df['min_volume'] > cutoff_volume].assign( volume_rank = lambda x: x['total_volume'].rank(ascending=False).astype(int) )
- 你注释掉的
insert代码不需要保留,loc赋值或者assign方法都会自动新增目标列,不需要提前插入空列。
内容的提问来源于stack exchange,提问作者Premjit Santra
相关产品推荐
相关产品推荐

