如何仅对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
相关产品推荐
相关产品推荐

