如何结合Pandas .iloc与布尔索引修改DataFrame指定位置值?
解决方案:按位置修改DataFrame特定值为NaN
需求回顾
需要对DataFrame完成两处精准修改:
- 第2列(列索引1)的前4行(行索引0-3)设为
NaN - 第3列(列索引2)的前2行(行索引0-1)设为
NaN
错误原因分析
你尝试的df.loc[(:2,1:) & (2:4,1)]存在语法错误:Python不支持括号内直接写:的切片语法,且loc是基于标签的索引方式,此处用整数位置索引的iloc会更直接适配需求。
最简实现方法
方法1:使用iloc(推荐,基于整数位置定位)
iloc专门用于按整数位置(行/列的顺序索引,从0开始)访问数据,语法简洁且完全匹配位置修改需求:
import pandas as pd import numpy as np # 生成示例DataFrame df = pd.DataFrame(np.random.standard_normal((7,3))) # 修改列1(索引1)的行0-3为NaN(iloc切片左闭右开,0:4对应行0、1、2、3) df.iloc[0:4, 1] = np.nan # 修改列2(索引2)的行0-1为NaN df.iloc[0:2, 2] = np.nan print(df)
方法2:使用loc(当行索引为默认整数时适用)
如果你的行索引是默认的连续整数,也可以用loc通过标签范围定位:
df.loc[0:3, 1] = np.nan # loc的标签切片是左闭右闭,0:3包含行0到3 df.loc[0:1, 2] = np.nan
说明
无需将DataFrame转为numpy数组,pandas自带的索引方法已经足够简洁高效,上述两种方法都能快速实现你要的修改效果。
内容的提问来源于stack exchange,提问作者Mehdi Rezzag Hebla
相关产品推荐
相关产品推荐

