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

Pandas合并DataFrame求和:排除Fecha与hours列生成空值总计行

解决Pandas总计行中指定列留空的问题

嗨,我明白你的问题了——当前的总计行把Fecha和hours列的字符串都拼接起来了,这肯定不是你想要的效果。咱们来修改代码,让这两列在总计行显示为空值,只对数值列求和。

问题根源

原代码里的result.loc['Total']= result.sum()会对所有列执行求和操作:对于数值列(比如impressions、revenue)是正常求和,但对于字符串列(Fecha、hours),Pandas的sum()方法会把所有字符串拼接在一起,这就是你看到一堆乱码的原因。

修改后的完整代码

import pandas as pd
import os

# 读取并合并数据
df = pd.read_csv('a_AR.csv')
df1 = pd.read_csv('a_US.csv')
result = pd.concat([df1, df]).sort_values(by=['Fecha','hours'])

# 删除不需要的列
del result['eCPM']
del result['Importe_a_pagar_a_medio']

# 构建总计行:数值列求和,指定列留空
# 自动筛选所有数值类型的列
numeric_cols = result.select_dtypes(include=['int64', 'float64']).columns
total_values = result[numeric_cols].sum()

# 创建总计行的Series,先初始化所有列,再赋值
total_row = pd.Series(index=result.columns)
total_row[numeric_cols] = total_values
# 把Fecha和hours列设为空值(pd.NA是Pandas推荐的缺失值标记)
total_row[['Fecha', 'hours']] = pd.NA

# 将总计行添加到DataFrame末尾
result = pd.concat([result, total_row.to_frame().T], ignore_index=True)

# 保存并清理文件
result.to_csv('a_AR-US_Days_hours.csv', index=False)
os.remove('a_US.csv')
os.remove('a_AR.csv')

效果说明

修改后你的输出会变成这样:

Fecha,hours,impressions,revenue
22/01/2018,23hs,1666,0.73
22/01/2018,23hs,67,0.02
,,1733,0.75

(空值在CSV里会显示为逗号之间的空白,完全符合你的需求)

额外说明

  • 用select_dtypes自动筛选数值列的好处是:如果以后你的数据新增了其他数值列,代码不需要手动修改就能自动求和。
  • pd.NA是Pandas 1.0+版本推荐的缺失值表示,如果你用的是旧版本,可以换成np.nan(需要提前导入numpy)。

内容的提问来源于stack exchange,提问作者Martin Bouhier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:25