pandas dataframe应用regex函数处理PIT列值得到错误结果如何解决
问题原因
- 你使用DataFrame的
apply()方法时默认以列为单位执行逻辑,传入lambda的参数x是一整列数据,而非单个单元格的值,因此正则匹配的是整列转字符串后的结果,输出不符合预期。 - 要对切片内的每个单元格单独做转换,应该使用
applymap()方法,该方法会逐元素执行传入的处理函数。
可直接运行的修正代码
import re df[2].iloc[:, 3:] = df[2].iloc[:, 3:].applymap( lambda x: re.findall(r'\w+', str(x))[0] + "-" + re.findall(r'\w+', str(x))[1] if len(str(x)) > 1 else 0 )
优化方案
推荐调整正则匹配逻辑,避免重复执行正则匹配,同时减少异常匹配的概率:
import re def pit_value_convert(val): val_str = str(val).strip() # 精准匹配「字母数字 (数字)」的格式 match = re.match(r'^(\w+) \((\d+)\)$', val_str) if match: return f"{match.group(1)}-{match.group(2)}" # 不符合格式的默认返回0 return 0 df[2].iloc[:, 3:] = df[2].iloc[:, 3:].applymap(pit_value_convert)
内容的提问来源于stack exchange,提问作者S23
相关产品推荐
相关产品推荐

