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会变成这样:
| Name | Value | |
|---|---|---|
| 0 | NameA | 0401016815 |
| 1 | NameB | NaN |
| 2 | NameC | 0414969141 |
| 3 | NameD | 0403612699 |
补充说明
- 对于空值(比如NameB),我们的逻辑会直接保留,不会做任何修改
- 正则表达式
^4\d{8}$精准匹配首字符为4、后面跟8个数字的9位字符串 - 辅助函数里的判断确保只有完全符合“12位长度、含空格但实际是9位数字”的内容才会被移除空格
内容的提问来源于stack exchange,提问作者misguided
相关产品推荐
相关产品推荐

