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

DataFrame数字列条件校验与格式修改技术咨询

处理DataFrame的数字列校验与格式化需求

嘿,针对你描述的DataFrame处理需求,我整理了一套清晰的pandas解决方案,直接上代码和解释:

首先,我们先构造出你提到的示例DataFrame:

import pandas as pd
import numpy as np

# 构建示例数据
df = pd.DataFrame({
    'Name': ['NameA', 'NameB', 'NameC', 'NameD'],
    'Value': ['401016815', None, '414969141', '0403 612 699']
})

接下来分两步实现你的需求:

1. 校验并给符合条件的数字添加前缀0

我们需要筛选出首字符为4、长度为9位纯数字的值,然后在开头添加0。可以用str.match()匹配正则表达式,再结合np.where进行批量修改:

# 匹配首字符为4、9位纯数字的模式
pattern1 = r'^4\d{8}$'
# 对符合条件的值添加前缀0,其他保持原样
df['Value'] = np.where(
    df['Value'].str.match(pattern1, na=False),
    '0' + df['Value'],
    df['Value']
)

2. 移除含空格的12位字符串中的空格

针对长度12位、去掉空格后是9位纯数字的情况,我们先判断条件,再用str.replace()移除空格:

# 定义辅助函数判断是否符合条件
def process_spaced_value(val):
    if pd.isna(val):
        return val
    # 检查原长度是否为12,且去掉空格后是9位纯数字
    if len(val) == 12 and val.replace(' ', '').isdigit() and len(val.replace(' ', '')) ==9:
        return val.replace(' ', '')
    return val

# 应用函数处理Value列
df['Value'] = df['Value'].apply(process_spaced_value)

最终处理结果

运行完上述代码后,你的DataFrame会变成这样:

NameValue
0NameA0401016815
1NameBNaN
2NameC0414969141
3NameD0403612699

补充说明

  • 对于空值(比如NameB),我们的逻辑会直接保留,不会做任何修改
  • 正则表达式^4\d{8}$精准匹配首字符为4、后面跟8个数字的9位字符串
  • 辅助函数里的判断确保只有完全符合“12位长度、含空格但实际是9位数字”的内容才会被移除空格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:00