使用iloc修改DataFrame单元格值失败,值未更新求助
问题原因及解决方法
问题根源
你用df[df['Well']=='L15'].iloc[4,6] = np.nan赋值失败,核心原因是链式索引(布尔筛选+iloc)会生成原DataFrame的临时副本,你修改的只是这个副本,原DataFrame根本没被改动。之后再执行查询时,又重新从原数据生成了新的副本,所以看到的还是原始值174.0。
正确的赋值方法
你需要直接定位到原DataFrame的对应位置,而非操作临时副本,这里提供两种可行方案:
方法1:结合.loc与索引转换
先获取Well='L15'所有行的索引,再精准定位目标单元格:
import numpy as np # 获取L15行的索引列表 l15_row_indices = df[df['Well'] == 'L15'].index # 定位第4个L15行(位置从0开始计数)、第7列(索引6),赋值为NaN df.loc[l15_row_indices[4], df.columns[6]] = np.nan
方法2:用.iloc直接定位行位置
先找到Well='L15'行在原DataFrame中的位置索引,再通过iloc赋值:
import numpy as np # 获取L15行在原DataFrame中的位置数组 l15_positions = np.where(df['Well'] == 'L15')[0] # 定位第4个L15行的位置、第6列,赋值为NaN df.iloc[l15_positions[4], 6] = np.nan
执行任意一种方法后,再查询df[df['Well']=='L15'].iloc[4,6],就能得到预期的NaN值。
内容的提问来源于stack exchange,提问作者Flor Elizabeth Garza
相关产品推荐
相关产品推荐

