pandas中如何为指定行列赋值及解决ix属性报错
问题报错根源
points.ix 是pandas 0.20版本之前提供的混合索引接口,因为该接口同时兼容标签索引、位置索引两种逻辑,容易出现逻辑歧义引发隐性bug,pandas团队后续逐步将其标记为弃用,从pandas 1.0正式版开始已完全移除该属性,因此调用时会抛出AttributeError。
需求实现的正确写法
你的需求是:将整型变量num = 1,写入DataFramepoints中行索引标签为3、列名为X的对应单元格。根据索引规则的不同,有两种稳定可用的实现方式:
- 按标签定位(最匹配当前场景,推荐使用)
使用pandas官方长期保留的loc接口,专门用于基于行标签、列标签的维度定位,写法如下:points.loc[3, 'X'] = num
该写法直接定位行标签为3、列标签为'X'的单元格完成赋值,和你原本想用ix实现的逻辑完全一致,也是目前pandas官方推荐的单元格赋值方案。 - 按物理位置定位
如果需要按照行在表中的物理存储顺序定位(不受行索引标签的实际取值影响),可以使用iloc接口,写法如下:points.iloc[3, points.columns.get_loc('X')] = num
注意:
iloc仅支持传入整数物理位置作为索引参数,不直接识别字符串类型的列名,因此必须通过points.columns.get_loc('X')获取X列对应的物理位置序号,直接写points.iloc[3, 'X']会触发类型不匹配的报错。
内容的提问来源于stack exchange,提问作者Leo Makhnovskiy
相关产品推荐
相关产品推荐

