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

如何仅对Pandas DataFrame指定列执行加法操作?

解决方案:仅对DataFrame数值列执行加法,保留字符串列值

当两个包含字符串列的DataFrame执行加法时,直接使用df1.add(df2)会导致字符串列被拼接,我们可以通过以下几种简便方式只对数值列求和,同时保留字符串列的原始内容:

方法1:手动指定列操作

先复制其中一个DataFrame的字符串列作为结果的基础,再单独对数值列执行加法:

import pandas as pd

df1 = pd.DataFrame([('Dog',1,2),('Cat',3,4),('Rabbit',5,6)], columns=['Animal','a','b'])
df2 = pd.DataFrame([('Dog',100,200),('Cat',300,400),('Rabbit',500,600)], columns=['Animal','a','b'])

# 复制字符串列
df_add = df1[['Animal']].copy()
# 对数值列执行加法并赋值
df_add[['a', 'b']] = df1[['a', 'b']].add(df2[['a', 'b']], fill_value=0)

执行后得到预期结果:

Animal    a    b
0     Dog  101  202
1     Cat  303  404
2  Rabbit  505  606

方法2:自动筛选数值列(通用型)

如果DataFrame列较多,不想手动指定数值列,可以用select_dtypes自动筛选数值类型列,适配更复杂的场景:

# 复制所有非数值列(此处为Animal列)
df_add = df1.select_dtypes(exclude='number').copy()
# 筛选数值列执行加法,再合并到结果中
df_add = df_add.join(df1.select_dtypes(include='number').add(df2.select_dtypes(include='number'), fill_value=0))

你尝试的方法无效的原因

你之前先执行df_add = df1.add(df2, fill_value=0),此时df_add的Animal列已经是拼接后的字符串(如DogDog),后续仅修改数值列无法恢复原始字符串列,因此需要先初始化结果为原始字符串列的副本,再添加数值列的求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:51:06