如何在Pandas DataFrame中按列序拼接两列并保留纯数字字符
Pandas 按列顺序拼接并提取纯数字解决方案
解决思路
核心完成两个操作:
- 从
id_part1和id_part2中提取所有纯数字字符,过滤非数字内容 - 按原列顺序拼接处理后的两列数据,空值/无数字的列不影响最终拼接结果
实现代码
先导入所需库:
import pandas as pd import re
定义提取纯数字的工具函数:
def extract_digits(x): # 统一转为字符串,兼容数字、空值等多种输入类型 str_x = str(x) # 匹配所有数字字符并拼接成纯数字字符串 return ''.join(re.findall(r'\d', str_x))
处理示例DataFrame:
# 示例DataFrame df = pd.DataFrame(data = { 'id_part1': ['1221002', 'Johny Cash', '2-12-0032', 2112], 'id_part2': ['', '345000223', '', 4322], 'created_date': ['2019-01-01', '15/02/2016', '2013-05-07', '2020-08-29'] }) # 对两列分别提取纯数字 df['id_part1_clean'] = df['id_part1'].apply(extract_digits) df['id_part2_clean'] = df['id_part2'].apply(extract_digits) # 按原列顺序拼接处理后的结果 df['full_id'] = df['id_part1_clean'] + df['id_part2_clean'] # 生成最终结果DataFrame result_df = df[['full_id', 'created_date']]
最终结果
执行代码后,result_df内容如下:
| full_id | created_date |
|---|---|
| 1221002 | 2019-01-01 |
| 345000223 | 15/02/2016 |
| 2120032 | 2013-05-07 |
| 21124322 | 2020-08-29 |
关键细节说明
- 类型兼容:先将输入转为字符串,确保整数、空字符串等不同类型的输入都能被正确处理
- 纯数字提取:用正则
r'\d'匹配所有数字字符,通过join拼接成完整的数字字符串 - 拼接逻辑:空字符串与其他字符串拼接时会自动忽略,因此某列无数字/为空时,直接保留另一列的处理结果
内容的提问来源于stack exchange,提问作者teror575
相关产品推荐
相关产品推荐

