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

Pandas df.loc结合正则匹配修改DataFrame列值失效问题排查

代码失效原因

你的代码没有生效是两个问题导致的:

  • 直接使用==运算符对比Series值和正则表达式字符串,只能做精确的字符串等值匹配,不会触发正则解析逻辑,永远无法命中包含DATE的字段名。
  • 你写的正则规则^.*DATE+$存在语法错误:末尾的+量词作用于紧邻的前一个字符E,规则实际含义是匹配「以1个及以上E结尾、前面包含DATE」的字符串,和你要匹配含DATE字段名的需求完全不符。
正确实现写法

pandas提供了Series.str.contains()方法专门支持正则模式匹配,用该方法构造过滤条件即可完成修改,完整可运行代码如下:

import pandas as pd
import re

data = [['ACK_ID','TEXT',30],
        ['TOT_ACTIVE_PARTCP_CNT','NUMERIC'],
        ['ADMIN_SIGNED_DATE', "TEXT", 30],
        ['BENEF_RCVG_BNFT_CNT','NUMERIC'],
        ['SPONS_SIGNED_DATE','TEXT',30]]
df = pd.DataFrame(data, columns=['FIELD_NAME', 'TYPE','SIZE (only for text fields)'])

# 将TYPE列所有值为NUMERIC的内容修改为FLOAT
df.loc[df["TYPE"] == "NUMERIC", "TYPE"] = "FLOAT"

# 正则匹配FIELD_NAME中包含DATE的行,将对应TYPE列值修改为DATE
df.loc[df["FIELD_NAME"].str.contains(r'DATE', regex=True), "TYPE"] = "DATE"

补充说明:

  • 如果需要严格匹配以DATE结尾的字段名,可以将匹配规则替换为r'DATE$'
  • 如果FIELD_NAME列存在空值,可以给str.contains()传入na=False参数,避免空值引发判断异常,写法为df["FIELD_NAME"].str.contains(r'DATE', regex=True, na=False)

执行上述代码后得到的DataFrame和你给出的预期结构完全一致。

内容的提问来源于stack exchange,提问作者Evan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:45:34