Pandas实现:typ map为D且extr无点时更新status列为'excep'
Pandas条件更新status列:满足指定条件时设为'excep'
需求说明
当数据行同时满足以下两个条件时,将其status列值更新为excep:
typ map列的值为Dextr列的值不包含点(.)
原始数据与问题代码
import pandas as pd import numpy as np data_df = pd.DataFrame({'typ map': ['D', 'T','A', 'D'], 'extr': ['rpt ', 'abc.txt','[test].[att]', 'depot and '], 'status': ['vld', '','vld', 'depot and '] }) # 原始代码存在问题:str.contains的.是正则通配符,且布尔索引写法错误 data_df['status'] = np.where(((data_df['typ map'] =='D') & (data_df[~data_df['extr'].str.contains('.',na=False)])),'excep',data_df.status)
代码修正说明
原始代码的两处问题:
str.contains('.')中的.是正则表达式通配符,会匹配任意字符,无法精准匹配字面意义的点,需转义为\.,或设置regex=False参数匹配字面字符- 布尔索引写法冗余,无需用
data_df[]包裹条件,直接使用布尔序列即可
修正后的代码:
import pandas as pd import numpy as np data_df = pd.DataFrame({'typ map': ['D', 'T','A', 'D'], 'extr': ['rpt ', 'abc.txt','[test].[att]', 'depot and '], 'status': ['vld', '','vld', 'depot and '] }) # 方式一:转义点号 data_df['status'] = np.where( (data_df['typ map'] == 'D') & (~data_df['extr'].str.contains('\.', na=False)), 'excep', data_df['status'] ) # 方式二:设置regex=False匹配字面点号,效果一致 # data_df['status'] = np.where( # (data_df['typ map'] == 'D') & (~data_df['extr'].str.contains('.', na=False, regex=False)), # 'excep', # data_df['status'] # ) print(data_df)
预期输出
typ map extr status 0 D rpt excep 1 T abc.txt 2 A [test].[att] vld 3 D depot and excep
内容的提问来源于stack exchange,提问作者kmr
相关产品推荐
相关产品推荐

