如何计算Pandas DataFrame指定数值列的绝对值之和?
计算Pandas DataFrame指定数值列的绝对值之和
问题场景
现有包含字符串列和数值列的DataFrame,需要对指定数值列计算所有元素的绝对值之和,且列列表col_list不能包含字符串类型列。修改后的DataFrame如下:
studentname mathantics science english r1 Ram 80 85 90 r2 Sam 90 95 -85 r3 Scott -85 80 80 r4 Ann 70 90 70 r5 John 95 -75 95 r6 Bobo 100 100 100
预期输出各数值列的绝对值总和:
mathantics 520 science 525 english 520
解决方案
1. 手动指定数值列计算
先定义仅包含数值列的col_list,对目标列先取绝对值再按列求和:
import pandas as pd # 构造目标DataFrame studentdetails = { "studentname": ["Ram", "Sam", "Scott", "Ann", "John", "Bobo"], "mathantics": [80, 90, -85, 70, 95, 100], "science": [85, 95, 80, 90, -75, 100], "english": [90, -85, 80, 70, 95, 100] } index_labels = ['r1', 'r2', 'r3', 'r4', 'r5', 'r6'] df = pd.DataFrame(studentdetails, index=index_labels) # 指定数值列列表 col_list = ['mathantics', 'science', 'english'] # 先取绝对值,再按列求和 abs_column_sum = df[col_list].abs().sum() print(abs_column_sum)
2. 自动筛选数值列(无需手动列名)
如果DataFrame数值列较多,可通过select_dtypes自动筛选数值类型列,再计算绝对值之和:
# 自动筛选整数/浮点数类型列,计算绝对值总和 abs_column_sum = df.select_dtypes(include=['int64', 'float64']).abs().sum() print(abs_column_sum)
关键说明
- 错误误区:若写成
df[col_list].sum().abs(),是先对列求和再取绝对值,不符合需求;正确顺序是先对每个元素取绝对值,再按列求和,即df[col_list].abs().sum()。 - 注意
col_list必须仅包含数值列,避免字符串列参与计算报错。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

