如何计算DataFrame除前两列外其余列的倒数?解决ValueError报错
解决DataFrame排除前两列计算倒数的问题
问题分析
你写的df_sort[df_sort.iloc[:,2:]]是错误的索引方式——Pandas会把传入的DataFrame当作布尔筛选条件,但你的iloc[:,2:]是数值列,无法转换成布尔数组,因此抛出ValueError。
正确实现方法
要实现除前两列外所有列取倒数,可以按以下方式操作:
方法一:直接修改原DataFrame
直接选中目标列并赋值计算结果,一步完成更新:
# 对第3列及之后的列计算倒数,覆盖原列数据 df_sort.iloc[:, 2:] = df_sort.iloc[:, 2:].rdiv(1) # 也可以用更直观的写法: # df_sort.iloc[:, 2:] = 1 / df_sort.iloc[:, 2:]
方法二:生成新DataFrame(不改动原数据)
如果需要保留原数据,可拆分后再合并:
# 提取前两列字符串类型数据 first_two_cols = df_sort.iloc[:, :2] # 计算剩余数值列的倒数 reciprocal_cols = df_sort.iloc[:, 2:].rdiv(1) # 合并两部分得到新DataFrame new_df = pd.concat([first_two_cols, reciprocal_cols], axis=1)
额外注意点
- 确保
iloc[:,2:]的列都是数值类型(int/float),若存在非数值列需先做类型转换或筛选 - 若列中有0值,计算倒数会得到
inf,可按需处理:import numpy as np df_sort.iloc[:, 2:] = df_sort.iloc[:, 2:].replace(0, np.nan).rdiv(1)
内容的提问来源于stack exchange,提问作者hadji
相关产品推荐
相关产品推荐

