You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何修改DataFrame除指定索引行外的所有数据值

问题描述

我有一个存储float64类型值的DataFrame,需要将除索引为388的行之外的所有数值都除以100,为此编写了如下代码:

数据预处理

import pandas as pd
df = pd.read_csv('state_cpi.csv')
d = {'January':1, 'February':2, 'March':3, 'April':4, 'May':5, 'June':6, 'July':7, 'August':8, 'September':9, 'October':10, 'November':11, 'December':12}
df['Month']=df['Name'].map(d)
r = {'Rural':1, 'Urban':2, 'Rural+Urban':3}
df['Region_code']=df['Sector'].map(r)
df['Himachal Pradesh'] = df['Himachal Pradesh'].str.replace('--','NaN')
df['Himachal Pradesh'] = df['Himachal Pradesh'].astype('float64')

提取目标数据子集

data = df.iloc[:,3:-2]

原除法实现代码

data[:,:388] = (data[:,:388] / 100).round(2)
data[:,389:] = (data[:,389:] / 100).round(2)

运行代码后发现,返回的DataFrame中索引为388的行的数据也被除以了100,不符合预期。


错误原因

你的代码存在两个核心问题:

  • 切片维度写反:二维数据的切片规则是[行筛选范围, 列筛选范围],你写的[:,:388]第一个行位置传入:代表选中所有行,第二个列位置传入:388代表选中前388列,全程没有添加「排除388行」的筛选逻辑,所有行(包括388行)自然都会被修改。
  • 索引用法错误:[:, 切片]是numpy二维数组的索引写法,不是pandas DataFrame的标准索引语法,直接使用会触发不符合预期的匹配行为。

正确实现方案

不需要拆分两段切片做两次运算,直接通过索引筛选排除目标行,一次性完成运算即可,逻辑更清晰也不容易出错:

# 筛选所有索引不等于388的行,全部数值列除以100后保留两位小数
data.loc[data.index != 388, :] = (data.loc[data.index != 388, :] / 100).round(2)

如果你需要按行的位置(而非索引标签)排除第388行,也可以用.iloc位置索引器实现:

data.iloc[lambda x: x.index != 388, :] = (data.iloc[lambda x: x.index != 388, :] / 100).round(2)

提示:如果你的DataFrame索引不是默认的连续整数索引,优先使用第一种.loc按索引标签筛选的写法,避免行位置和索引标签不匹配导致的筛选错误。


内容的提问来源于stack exchange,提问作者Samar Pratap Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:48:49