Pandas使用正则extract提取KV关联值生成多列如何解决
问题原因
你当前得到多列输出的核心原因是正则表达式中使用了2个独立的捕获组,pandas.Series.str.extract() 方法会为每个捕获组单独返回一列,因此对应不同模式的匹配结果会拆分到不同列,空缺位置填充NaN。
解决方法
方法1:优化正则表达式(推荐)
将两个匹配逻辑合并为单个捕获组,用非捕获组(加?:前缀)来包装可选的匹配规则,避免生成多余列:
# 单个捕获组适配整数/小数、带空格/不带空格的KV前缀匹配 df1['col1'].str.extract(r'(\d+(?:\.\d+)?\s?KV)')
正则规则说明:
\d+:匹配整数部分(?:\.\d+)?:非捕获组,匹配可选的小数部分,?:表示该组不单独生成返回列\s?:匹配0或1个空格,适配KV前带空格和不带空格的场景KV:匹配固定后缀
方法2:不修改原有正则,合并返回列
如果不想调整正则,可以对返回的多列结果做合并,取每行的非空值即可:
# 先按原有逻辑提取 res = df1['col1'].str.extract(r'(\d*\.\d+\sKV)|(\d+\sKV)') # 横向填充空值后取第一列 res = res.bfill(axis=1).iloc[:, [0]]
两种方法都可以得到你期望的单列匹配结果。
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

