You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas实现:typ map为D且extr无点时更新status列为'excep'

Pandas条件更新status列:满足指定条件时设为'excep'

需求说明

当数据行同时满足以下两个条件时,将其status列值更新为excep:

  • typ map列的值为D
  • extr列的值不包含点(.)

原始数据与问题代码

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)

代码修正说明

原始代码的两处问题:

  1. str.contains('.')中的.是正则表达式通配符,会匹配任意字符,无法精准匹配字面意义的点,需转义为\.,或设置regex=False参数匹配字面字符
  2. 布尔索引写法冗余,无需用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:07:09