【Python】dataframe两列的字符串和数字拼接,但出现none值则不做处理的方法(案例)

在Python的pandas库中,如果你想遍历DataFrame的所有元素,并对非None值的元素增加某个字段,可以使用applymap函数结合条件表达式来实现。applymap函数允许你将一个函数应用于DataFrame的每个元素。

在这里插入图片描述

以下是一个示例,假设我们有一些公司的报价单,以Dataframe的格式来储存,它的字段有公司名、报价金额、和金额单位的信息。但是这个数据表的格式不全,数据可能会有填漏的部分(有None字段);

如果遍历dataframe的每一行有缺失的部分,含有None值,则视为无效数据,直接返回None不做处理;

而如果三个信息都全的情况下,只需要拼接金额和金额单位,也就是拼接字符串和数值后,形成新的一列放在dataframe里。最终的结果如图:

在这里插入图片描述先创建一个DataFrame示例:

import pandas as pd
import numpy as np

# 创建一个示例DataFrame
df = pd.DataFrame({
'company': ['A 公司','B 公司',None,'D公司'],
'amount': [120,1400, 1,None],
'amount_unit':['美元','千元','元',None]})

我们要处理的是,遍历DataFrame的所有行,但不对None值进行处理,对行里面没有包含None的部分拼接成新的一列。

可以选择直接for循环,用 iloc[ ] 遍历每一行的元素,然后用if 判断加条件来处理。这个方法这里不展示了。主要展示 applymap函数结合条件表达式的方法,对于处理一整行的数据比较直观,代码也轻便很多。

逻辑:

  1. 定义一个函数,处理对行的所有元素做是否为空的判断,如果有空值,则直接返回None值;如果无空值,则进行我们需要的处理
  2. 直接将函数放入applymap函数中,这个过程约等于对所有的行进行了for循环。

整体代码如下:

import pandas as pd
import numpy as np

# 创建一个示例DataFrame
df = pd.DataFrame({
'company': ['A 公司','B 公司',None,'D公司'],
'amount': [120,1400, 1,None],
'amount_unit':['美元','千元','元',None]})

# 定义一个函数,对非None值增加字段
def merge_values(row):    
    if pd.isnull(row['company']) or pd.isnull(row['amount']) or pd.isnull(row['amount_unit']):
        return None
    else:
        return  str(row['amount'])+ row['amount_unit'] #后续处理条件

# # 使用applymap应用函数,应用函数到DataFrame的每一行
df['Combined'] = df.apply(merge_values, axis=1)

# 检查结果
print(df)

如果你需要对某些特定列进行操作,也可以使用apply函数,但需要指定axis=0来按行操作:

# # 使用applymap应用函数,应用函数到DataFrame的每一列
df['Combined'] = df.apply(merge_values, axis=0)
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值