如何按指定行列列表替换DataFrame中的对应位置值?
解决DataFrame指定行列交叉值替换为0的问题
原代码为啥没用
你写的df[3,5,8,9][1,4,6]=0属于链式索引操作,Pandas没法保证这种操作改的是原DataFrame还是临时生成的副本——绝大多数情况下改的是副本,所以原数据根本没变化,代码自然不生效。
正确的写法
得用Pandas专门的索引方法.loc或.iloc,这俩能明确定位到原DataFrame的位置,直接修改数据:
按位置索引(.iloc)
如果你的“第3、5、8、9行”“第1、4、6列”是指从0开始的位置序号(比如第1列对应位置0,第3行对应位置2),用.iloc:
# 行位置:第3行→2,第5行→4,第8行→7,第9行→8;列位置:第1列→0,第4列→3,第6列→5 df.iloc[[2,4,7,8], [0,3,5]] = 0
按标签索引(.loc)
如果你的行标签就是3、5、8、9,列标签就是1、4、6,直接用.loc:
df.loc[[3,5,8,9], [1,4,6]] = 0
重要提醒
绝对别用链式索引(比如df[a][b])来改数据,这种操作的行为完全不确定,要么改不动,要么可能搞出奇怪的错误。一定要用.loc或.iloc来定位修改。
内容的提问来源于stack exchange,提问作者CinfaCinfa
相关产品推荐
相关产品推荐

