You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则表达式识别并复制Pandas DataFrame特定行求助

解决Pandas DataFrame特定行的正则提取与拆分展开问题

看起来你想要把DataFrame里的每行文本按特定规则拆分成多行,同时保留原行内容——这个需求完全可以用正则表达式结合Pandas的explode方法实现,我来一步步给你演示怎么做。

首先,我们先还原你的示例数据:

import pandas as pd

df = pd.DataFrame({
    'var1': [
        'House A and B',
        '2 garage + garden',
        'fridges'
    ]
})

接下来,我们需要写一个自定义函数,用来对每行的var1文本进行正则匹配和拆分,返回拆分后的元素列表。针对你给出的三种情况,我们分别处理:

import re

def split_text(text):
    # 处理房屋的情况:匹配"House X and Y"格式
    house_match = re.match(r'House (\w+) and (\w+)', text)
    if house_match:
        return [f'House {house_match.group(1)}', f'House {house_match.group(2)}']
    
    # 处理车库+花园的情况:匹配"数字 garage + garden"格式
    garage_garden_match = re.match(r'(\d+) garage \+ garden', text)
    if garage_garden_match:
        num_garages = int(garage_garden_match.group(1))
        # 根据数字生成对应数量的Garage项,再追加Garden
        garages = [f'Garage {i+1}' for i in range(num_garages)]
        garages.append('Garden')
        return garages
    
    # 处理冰箱的情况:匹配复数形式的"fridges"
    if text == 'fridges':
        return ['fridge 1', 'fridge 2']
    
    # 兜底:如果没有匹配到任何规则,返回原文本(可根据需求调整)
    return [text]

然后,我们给DataFrame新增一列var2,把每行的var1传入函数得到拆分后的列表,再用explode方法把列表展开成多行:

df['var2'] = df['var1'].apply(split_text)
result_df = df.explode('var2').reset_index(drop=True)

运行这段代码后,result_df就是你想要的结果:

var1var2
0House A and BHouse A
1House A and BHouse B
22 garage + gardenGarage 1
32 garage + gardenGarage 2
42 garage + gardenGarden
5fridgesfridge 1
6fridgesfridge 2

一些补充说明:

  • 如果你的数据还有其他类似的文本模式,只需要在split_text函数里新增对应的正则匹配逻辑即可,扩展性很强。
  • 正则表达式可以根据实际数据格式调整,比如如果房屋名称包含空格或特殊字符,可以把\w+改成更通用的\S+或者自定义字符集(比如[A-Za-z0-9 ]+)。
  • 若处理超大数据集,apply效率可能偏低,可以考虑用pandas.str.extractall结合分组拼接的方式优化,但普通规模的数据用apply完全够用。

内容的提问来源于stack exchange,提问作者Toine_zg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:39