使用Pandas按条件修改指定单元格,无法更改原DataFrame求助
问题原因及解决方法
你的代码之所以没修改原DataFrame,核心问题是链式索引导致修改作用在临时副本上:andrew_ramirez[andrew_ramirez['Datacenter'].isin(['ATL2','ACT1'])]['payout'] 这种连续两次方括号的写法,Pandas会返回原数据的副本而非视图,你对这个副本的修改不会同步到原DataFrameandrew_ramirez上。
正确写法
推荐使用Pandas官方指定的.loc定位方式,直接对原DataFrame进行修改:
写法一(直接写条件)
andrew_ramirez.loc[andrew_ramirez['Datacenter'].isin(['ATL2','ACT1']), 'payout'] *= 0.25
写法二(拆分条件为变量,更易读)
# 先定义筛选条件 mask = andrew_ramirez['Datacenter'].isin(['ATL2','ACT1']) # 通过.loc定位并修改 andrew_ramirez.loc[mask, 'payout'] *= 0.25
补充写法(显式赋值)
如果需要更清晰的赋值逻辑,也可以这样写:
mask = andrew_ramirez['Datacenter'].isin(['ATL2','ACT1']) andrew_ramirez.loc[mask, 'payout'] = andrew_ramirez.loc[mask, 'payout'] * 0.25
关键提醒
在Pandas中修改DataFrame时,要避免使用链式索引(连续多次[]取值),优先用.loc(行索引+列名)的方式定位数据,这样能确保操作直接作用在原数据上,不会出现修改不生效的情况。
内容的提问来源于stack exchange,提问作者mcccc
相关产品推荐
相关产品推荐

