将两个具有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'和'str'“
3.无法在位置3266处解析字符串“ $ 0”
我希望输出为:
Actual
3
0
nan
3
2
1
答案 0 :(得分:0)
您有两个不同的问题。首先,您要将非数字列转换为数字值。其次,您希望对各列求和,在所有行均为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)
替换了nan
。 df.loc[df.any(axis=1)]
意味着我们仅更改至少有一个非nan
值的行的值。