如何通过行索引对Pandas DataFrame指定值执行乘法运算?
解决Pandas DataFrame特定行数值修改问题
错误原因分析
- 你的代码出现异常的核心问题是Value列属于object类型(混合了字符串和数值):直接对字符串执行乘法会触发字符串重复逻辑,比如
"-10.90979" * 10会生成重复的字符串,这就是你看到的异常输出。 - 使用
mul(10)报错是因为字符串对象没有数值类型的mul方法,只有int/float这类数值类型才能调用该方法。
正确解决方案
方法1:直接用布尔索引定位修改(推荐)
不需要额外获取索引,直接通过属性名称筛选目标行,先将对应Value转为数值再运算:
import pandas as pd # 定位目标行,转换为数值后乘10并赋值 target_mask = df['Property'] == 'Density (g/cm3)' df.loc[target_mask, 'Value'] = pd.to_numeric(df.loc[target_mask, 'Value']) * 10
如果需要保留Value列的字符串类型(兼容其他行的字符串值),可以再转成字符串:
target_mask = df['Property'] == 'Density (g/cm3)' df.loc[target_mask, 'Value'] = (pd.to_numeric(df.loc[target_mask, 'Value']) * 10).astype(str)
方法2:通过索引修改(若你坚持用索引方式)
先获取目标行索引,同样需要转换数值类型后运算:
# 获取目标行的索引 target_idx = df[df['Property'] == 'Density (g/cm3)'].index[0] # 转数值乘10后赋值 df.loc[target_idx, 'Value'] = pd.to_numeric(df.loc[target_idx, 'Value']) * 10
额外提示
尽量使用df.loc而非链式索引(如df.iloc[row_index][0]),链式索引可能返回数据视图而非副本,导致赋值不生效或出现意外行为。
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

