如何为Pandas DataFrame添加字符串行并计算数值列总和?
实现方案拆解
我来一步步帮你搞定这个需求,用Pandas就能轻松实现:
1. 构建目标格式的DataFrame
先创建数值部分的数据,再插入第一行的字符串标签,最后设置好列名:
import pandas as pd # 初始数值数据 numeric_data = [[4, 2, 4], [1, 6, 2], [5, 8, 6]] df = pd.DataFrame(numeric_data, columns=['Col1', 'Col2', 'Col3']) # 在最前面插入字符串行(先加到末尾再重新排序索引) df.loc[-1] = ['A', 'B', 'C'] df = df.sort_index().reset_index(drop=True) print(df)
运行后输出的DataFrame就是你要的格式:
Col1 Col2 Col3 0 A B C 1 4 2 4 2 1 6 2 3 5 8 6
2. 计算数值行的列总和并追加到末尾
我们需要排除第一行的字符串数据,只对后面的数值行求和,再把结果作为新行加进去:
# 计算数值行(从第2行开始,即iloc[1:])的各列总和,仅计算数值类型 sum_row = df.iloc[1:].sum(numeric_only=True) # 把总和行转成DataFrame格式,追加到原DataFrame df = pd.concat([df, sum_row.to_frame().T], ignore_index=True) print(df)
此时输出会多一行总和:
Col1 Col2 Col3 0 A B C 1 4 2 4 2 1 6 2 3 5 8 6 4 10 16 12
3. 创建使用字符串行数据的函数
假设你想用第一行的A/B/C这些字符串做逻辑处理(比如关联列的统计结果、生成自定义报告等),这里写一个示例函数,演示如何调用这些字符串数据:
def process_with_string_labels(df): # 获取第一行的字符串标签(也就是你说的loc[0,:]) string_labels = df.iloc[0].values.tolist() # 提取纯数值数据(排除第一行标签和最后一行总和) num_df = df.iloc[1:-1] # 示例逻辑:用字符串标签匹配列,打印每个标签对应的列总和 for label, col_name in zip(string_labels, num_df.columns): col_total = num_df[col_name].sum() print(f"标签「{label}」对应列「{col_name}」的总和:{col_total}") # 调用函数 process_with_string_labels(df)
运行后会输出:
标签「A」对应列「Col1」的总和:10 标签「B」对应列「Col2」的总和:16 标签「C」对应列「Col3」的总和:12
注意事项
- 插入字符串行后,DataFrame的列类型会变成
object(因为混合了字符串和数值),所以求和时一定要加上numeric_only=True,避免报错。 - 如果你的原始DataFrame已经有列名,直接复用即可,不需要额外设置。
内容的提问来源于stack exchange,提问作者tedioustortoise
相关产品推荐
相关产品推荐

