如何从pandas混合格式的prices列中提取每条记录的最低数值
解决方案
核心思路是用正则直接提取文本中所有的数值片段,跳过无关字符后再取最小值,兼容所有你提到的场景。
完整实现代码
import pandas as pd import re # 自定义价格提取函数 def get_min_price(content): # 统一转为字符串,兼容原生为int/float的条目 content_str = str(content) # 匹配所有整数、小数字符串 num_str_list = re.findall(r'\d+\.?\d*', content_str) # 转换为float后取最小值返回 return min(float(num) for num in num_str_list) # 对prices列应用函数 df['prices'] = df['prices'].apply(get_min_price)
逻辑说明
- 正则
r'\d+\.?\d*'可以匹配所有不带负号的整数、小数,自动过滤掉所有非数值的无关字符(比如你示例中g条目的Normal:、Premium:等) - 先将所有内容转字符串的操作,避免了原本就是数值类型的条目调用字符串方法时报错
- 代码量少,逻辑清晰,符合Python惯用的pandas处理范式
边界情况补充
如果你的价格存在负数的情况,只需要把正则调整为r'-?\d+\.?\d*'即可适配负数值提取。
内容的提问来源于stack exchange,提问作者user387427834
相关产品推荐
相关产品推荐

