如何从Pandas字符串列提取1-2个日期生成租赁起止日期新列
Pandas 从文本列按顺序提取多个日期到指定列的实现方案
核心逻辑:用Pandas字符串方法str.extractall()批量提取每行所有符合格式的日期,自动保留匹配顺序和原行索引,再按行分组后分配到对应列即可。
完整实现代码
import pandas as pd # 构造测试DataFrame,可替换为你自己的数据集 df = pd.DataFrame({ 'lease_text': [ '75 years from 25/12/1975', '125 years from 14/3/2019 until 13/3/2144', 'from 18/02/2011 to 24/03/2156' ] }) # DD/MM/YYYY格式日期匹配正则,可直接替换为你自己调试好的正则表达式 date_regex = r'\b(\d{1,2}/\d{1,2}/\d{4})\b' # 提取所有匹配日期并重塑为每行对应多列日期 dates = df['lease_text'].str.extractall(date_regex).unstack() # 按匹配顺序分配到对应列 df['Lease_Startdate'] = dates[0][0] df['Lease_Enddate'] = dates[0][1] # 可选操作:将字符串日期转为datetime格式,方便后续时长计算等操作 df['Lease_Startdate'] = pd.to_datetime(df['Lease_Startdate'], format='%d/%m/%Y') df['Lease_Enddate'] = pd.to_datetime(df['Lease_Enddate'], format='%d/%m/%Y')
效果说明
- 每行第一个匹配的日期会自动存入
Lease_Startdate,第二个匹配的日期存入Lease_Enddate - 若某行只有1个日期,
Lease_Enddate会自动填充为NaN - 若某行存在超过2个日期,默认仅取前两个,刚好匹配你最多只有租赁开始、结束两类日期的场景,无需额外过滤
内容的提问来源于stack exchange,提问作者pekoz1
相关产品推荐
相关产品推荐

