如何从两列object类型数据中提取仅含字母数字的值?
解决方案
根据你的数据和期望输出,核心需求是:
- 提取
col1中包含数字的字符串 - 当
col1是纯字母时,若col2包含数字且其字母前缀与col1不一致,提取该col2的字符串
以下是用Python Pandas实现的代码:
1. 准备数据
import pandas as pd data = { 'col1': ['AB', 'BC123', 'BG274', 'DC', 'DG156'], 'col2': ['AB123', 'SG', 'HF', 'DG789', 'HD'] } df = pd.DataFrame(data)
2. 定义辅助判断函数
# 判断字符串是否为纯字母 def is_all_alpha(s): return s.str.match(r'^[A-Za-z]+$').fillna(False) # 判断字符串是否包含数字 def has_digit(s): return s.str.contains(r'\d').fillna(False) # 提取字符串的开头字母前缀 def get_alpha_prefix(s): return s.str.extract(r'^([A-Za-z]+)')[0]
3. 遍历筛选目标值
result = [] for _, row in df.iterrows(): col1_val = row['col1'] col2_val = row['col2'] # 如果col1含数字,直接加入结果 if has_digit(pd.Series([col1_val]))[0]: result.append(col1_val) else: # 如果col2含数字,且前缀和col1不同,加入结果 if has_digit(pd.Series([col2_val]))[0]: col1_prefix = col1_val col2_prefix = get_alpha_prefix(pd.Series([col2_val]))[0] if col1_prefix != col2_prefix: result.append(col2_val) # 输出最终结果 for item in result: print(item)
运行结果
BC123 BG274 DG789 DG156
关键说明
- 用正则表达式
^[A-Za-z]+$匹配纯字母字符串,\d匹配数字 - 提取字母前缀用于对比,确保只保留前缀与
col1不一致的col2含数字条目 - 遍历每行处理,精准匹配你的期望输出逻辑
内容的提问来源于stack exchange,提问作者Jayesh Nikam
相关产品推荐
相关产品推荐

