Pandas多层索引DataFrame修改值不生效原因及正确操作咨询
问题原因
- 你的操作属于链式索引赋值,第一次执行
df.loc["f1","fm1"]时,pandas返回的是对应行的Series副本而非原DataFrame的视图,后续对这个副本执行.loc["k"]=-999的修改只会作用在临时副本上,不会同步到原始的df,所以查询原数据时还是旧值。 - 这种行为是pandas的设计机制导致的,链式操作无法保证返回对象是视图还是副本,修改副本自然不会对原数据生效,部分场景下pandas还会抛出
SettingWithCopyWarning警告提醒这类风险。
正确修改方法
不要拆分两次.loc调用,把行索引、列选择都放在同一个.loc操作里完成一次定位,示例代码如下:
# 多级行索引用元组包裹,直接指定对应行+对应列,修改直接作用在原df df.loc[("f1", "fm1"), "k"] = -999
修改后再查询df.loc[("f1", "fm1"), "k"]就会返回你设置的-999。
内容的提问来源于stack exchange,提问作者Nabat Farsi
相关产品推荐
相关产品推荐

