python - 对熊猫中的两个对象列求和
问题描述
组合两个具有 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
解决方案
你有两个不同的问题。首先,您要将非数字列转换为数值。其次,您希望对列求和,将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
s. df.loc[df.any(axis=1)]
意味着我们只更改至少有一个非值的行的nan
值。
推荐阅读
- sql - 如何将 NULL 或 0 值替换为破折号(-)或空白字符串
- c++ - 在 1 个项目下的 C++ 中的 code::blocks 中创建多个文件
- javascript - 从 JSON 字符串中提取图像
- java - 如何按降序对bucketsort进行排序
- asp.net-core - 将代码发布到生产 IIS 服务器会干扰运行 http 请求吗?
- javascript - 将当前数据填充到引导表单
- d3.js - d3js 绘制未定义的折线图是不可迭代的
- angular - 增加解析端点的超时时间
- python - 如何将数据正确保存到列表中,然后在 python 中将其转换为 DataFrame?
- wix - 如何在 wix 安装程序中自定义欢迎对话框