【Python】dataframe 两列的数值合并计算,但是如果是none值,则视为0相加减

在这里插入图片描述
如果想在Python的pandas中,将dataframe的两列的值合并起来处理,但是遇到 None 值是则替换为0,或者空值,使得不影响运行结果,可以使用以下方法:
在这里插入图片描述

方法1:使用 fillna

如果想要把整一行的空值处理成0再与相加,可以使用 fillna 方法,然后再进行合并。

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': [5, None, 7, None]
})

# 将None值替换为0
df['A'] = df['A'].fillna(0)
df['B'] = df['B'].fillna(0)

# 合并两列的值
df['Combined'] = df['A'] + df['B']

# 检查结果
print(df)

原来的df表:
在这里插入图片描述

运行后的结果:
在这里插入图片描述
这个方法在使用了fillna(0)的时候,会对原数据进行修改,原本是NaN的值,最后变成了0.

如果不想对原数据有修改,则可以使用下面的两种方法:

方法2:使用 applylambda

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': [5, None, 7, None]
})

# 使用apply和lambda函数合并两列的值,None值视为0
df['Combined'] = df.apply(lambda row: row['A'] if pd.isnull(row['B']) else row['B'] if pd.isnull(row['A']) else row['A'] + row['B'], axis=1)

# 检查结果
print(df)

运行的效果如下:
在这里插入图片描述

主要的代码部分:
df.apply(lambda row: row[‘A’] if pd.isnull(row[‘B’]) else row[‘B’] if
pd.isnull(row[‘A’]) else row[‘A’] + row[‘B’], axis=1)

如果看不懂这个表达式,可以看看下面的解释:

  1. pd.isnull(row[‘B’]):用于检查row[‘B’]中的值是否是None;
  2. row[‘A’] if pd.isnull(row[‘B’]) else … : 这个条件表达式的意思是,如果row[‘B’]是缺失值(pd.isnull(row[‘B’])为True),则计算的结果= row[‘A’]的值,否则继续判断下一个条件(两列的值相加);
    3.df.apply(axis=1),axis=1参数告诉apply函数沿着行操作,即对DataFrame的每一行应用lambda表达式(约等于对每一行的for循环)

这个方法的问题是,如果需要合并处理的列比较多,写法就会比较长,需要在上面叠加 条件判断。

如果大家有更加简洁轻便的写法,欢迎下面评论呀~

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值