Pandas给DataFrame指定列最后一个元素赋值的最简单方法是什么?
可行的更简便无警告实现方案如下:
- 最短优先推荐方案:直接针对
B列的Series调用iat按位置赋值,完全规避链式索引问题,性能也最高df['B'].iat[-1] = 1 - 次选简化方案:直接修改
B列对应的numpy数组值
注意:如果df['B'].values[-1] = 1B列是对象类型、或存在大量缺失值自动转浮点型的场景,优先用第一种iat方案,避免出现类型异常。
补充说明
你之前用到的df.iloc[-1, df.columns.get_loc('B')] = 1已经是iloc语法下的标准无警告写法,没有更简化的空间。而你提到的df.iloc[-1]['B']触发警告的原因是属于链式索引操作,pandas无法判断你拿到的最后一行是原数据的视图还是副本,因此弹出警告提醒可能不会修改原DataFrame。
另外你之前用到的at、loc写法是基于索引标签赋值,如果你的DataFrame索引不是默认的连续整数、或者存在重复索引,可能出现不符合预期的赋值结果,而上述两种按位置赋值的方案不管索引是什么格式,都只会修改最后一行的B列值,适配性更强。
内容的提问来源于stack exchange,提问作者jaried
相关产品推荐
相关产品推荐

