Excel判断并返回一个单元格不包含另一单元格的内容

工作中遇到这样一个需求,思想比较简单,但是可以节省一些工作量,这里记录下来。

需求大致是这样的:

有一张type表,H列表示新能源汽车的款型,I列表示新能源汽车车型,但是H列格式并不规范,有的记录开头包含I列(车型)内容,如下图红色框选部分所示。对于这些内容我们希望将车型信息删除,H列统一格式,只包含款型信息,大致改为格式“*车型”,如下图黄色所示。
在这里插入图片描述

Excel操作

**方法一:**使用IF函数判断并筛选出不符合命名规则的记录,符合规则的返回原数值,不符合规则的记录使用RIGHT函数将前几个包含车型信息的字符删除

=IF(ISERROR(SEARCH(I2,H2)),H2,RIGHT(H2,LEN(H2)-LEN(I2)-1))

******************************
IF(条件,a,b) 条件判断函数,条件满足返回a,不满足条件返回b
ISERROR(值) 查看值是否为错误值,Excel错误值有:#VALUE!,#N/A,#DIV/0!,#REF!,#NAME?,#NUM!,#NULL!等
SEARCH(字符,A1) 查看A1单元格是否包含某字符,第一个参数还支持通配符“*”和“?”,不区分英文大小写(区别于		FIND函数区分大小写)
RIGHT(A1,n) 截取单元格A1的值中最右面n个字符

结果如K列款型_1所示:
在这里插入图片描述

方法二:**使用IF函数判断并筛选出不符合命名规则的记录,符合规则的返回原数值,不符合规则的记录使用SUBSTITUTE函数将H列对应的I列内容用空白字符""替换

=TRIM(IF(ISERROR(SEARCH(I2,H2)),H2,SUBSTITUTE(H2,I2,"")))

********************************
SUBSTITUTE(text,old_text,new_text) 将文本text中old_text部分用new_text替换
TRIM(值) 将输入值中左右空格剔除

结果如J列款型_1_1所示:
在这里插入图片描述

Python操作

使用Python我们考虑分步骤操作,有几个比较常见的数据处理操作,在此记录以便以后使用。

一、Pandas判断每一行一列数据是否在另一列有展示

首先,我们建一张DataFrame

data = [['北京','上海','深圳','广州','杭州','南京','武汉','成都','苏州','青岛'],
            ['上海','南京','杭州','苏州','无锡','广州','深圳','东莞','香港','澳门']]
df = pd.DataFrame(data)
df = df.T
df.columns=['cities1','cities2']

首先我们想到的是in函数,但是要注意DataFrame不能整列比较,要使用df.apply方法,同时加上参数axis=1按行操作(df.apply默认按照axis=0按列操作)

df[df.apply(lambda x: x.cities2 in x.cities1, axis=1)]

二、Pandas判断一列数据每一个记录是否出现在另一列整个列表

在以上的基础上,我们将判断的基础增加到一整列值

df.cities2[df.apply(lambda x: x.cities2 in df.cities1.values, axis=1)]

#增加一列判断结果
df['result'] = df.apply(lambda x: 'yes' if x.cities2 in df.cities1.values else 'no', axis=1)

三、实证Pandas操作

对于工作中的实例,进行以下操作:

import pandas as pd

df = pd.read_excel(r'.\type.xlsx')

#新建一列'车型_1_2',每条记录满足款型包含车型信息的,车型用空字符串""替换,否则返回款型原数据
df['车型_1_2'] = df.apply(lambda x: x.款型.replace(x.车型,"") if x.车型 in x.款型 else x.款型, axis=1)

df.to_excel(./type_1.xlsx)

结果如下图所示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值