如何用带if/else的正则表达式从DataFrame列提取指定单位值?
从DataFrame的Unit列提取指定单位字符串
直接上能用的函数代码,批量处理50行数据完全没问题:
import pandas as pd def extract_target_units(df): # 定义所有要匹配的单位模式,用|分隔,非捕获组避免多余分组 pattern = r'(\d*\s*(?:milliliter|liter|ounce|kilogram|fluid\s*ounce))' # 批量提取匹配内容,无匹配返回NaN extracted = df['Unit'].str.extract(pattern, expand=False) # 把空值转成None,满足无匹配时返回None的要求 return extracted.apply(lambda x: x if pd.notna(x) else None)
关键说明
- 模式里的
\d*匹配0个/多个数字,\s*匹配0个/多个空格,能覆盖"250 milliliter"、"1liter"、"fluid ounce"这类各种格式 (?:...)是非捕获组,把所有单位选项打包,确保str.extract只返回我们要的完整匹配串- 没必要逐行写if/else:pandas的
str.extract会一次性处理整列数据,之后用apply把空值(NaN)转成None,比循环写判断高效多了
使用示例
假设你的DataFrame叫df,可以这么用:
# 获取提取结果 unit_results = extract_target_units(df) # 或者直接给原DataFrame加一列存提取值 df['Extracted_Unit'] = extract_target_units(df)
内容的提问来源于stack exchange,提问作者C C
相关产品推荐
相关产品推荐

