首页 > 解决方案 > 对熊猫中的两个对象列求和

问题描述

组合两个具有 dtype 对象的类似列时出现问题。由于两列相同,因此它们永远不会在同一行中具有值。列中的所有内容都是整数,但有一些 nan 值和“$0”,我尝试过的所有解决方案似乎都没有绕过。数据如下所示:

Actual    MTD Actual 
nan       3
nan       $0  
nan       nan
3         nan
2         nan
1         nan

我尝试将列更改为字符串类型,然后更改为整数类型。我也尝试用 0 填充 nan 值,但这似乎不起作用

我试过的:
1. df[["Actual", "MTD Actual"]].sum(axis=1)
2. df['Actual'].add(df['MTD Actual'], fill_value=0)
3.pd.to_numeric(df['MTD Actual'])

对应的错误信息:
1. 将求和,但整列为 NaN
2. 返回“+: 'int' and 'str' 不支持的操作数类型”
3. 无法在位置 3266 解析字符串“$0”

我希望输出为:

Actual     
3      
0         
nan       
3         
2         
1         

标签: pythonpandasobjectsum

解决方案


你有两个不同的问题。首先,您要将非数字列转换为数值。其次,您希望对列求和,将nan值保留在所有行所在的位置,nan但将它们视为0其他行。

这是一个应该有效的解决方案:

df.loc[df.any(axis=1)] = df.replace('[\$,]', '', regex=True).astype(float).fillna(0)
df = df.sum(axis=1)

正则表达式删除美元符号和逗号。 .astype(float)将数据转换为数字,并.fillna(0)替换nans. df.loc[df.any(axis=1)]意味着我们只更改至少有一个非值的行的nan值。


推荐阅读