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

如何在Pandas中对str.extract提取的日期分组列用Lambda生成单列?

当然可以!用Lambda或者直接列拼接都能搞定

完全没问题,你可以通过apply()配合lambda函数,把提取出来的month、day、year三列合并成单一列,甚至还能顺便统一日期格式。我给你两种实用的实现方式:

方法1:Apply + Lambda 逐行合并

先完成日期的正则提取,再用lambda函数按行拼接字段:

import pandas as pd

# 构建示例数据
df = pd.DataFrame({
    'raw_date': ['04/20/2009', '04/20/09', '4/20/09', '4/3/09', '04-20-2009']
})

# 正则提取月、日、年三列(匹配/或-分隔符,支持1-2位的月/日,2-4位的年)
df[['month', 'day', 'year']] = df['raw_date'].str.extract(r'(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})')

# 用Lambda合并成自定义格式的日期列
df['merged_date'] = df.apply(
    lambda row: f"{row['month'].zfill(2)}/{row['day'].zfill(2)}/{row['year']}", 
    axis=1
)

这里用zfill(2)是为了统一月/日为两位数字(比如把4/3/09变成04/03/09),你也可以改成其他格式,比如YYYY-MM-DD:

df['merged_date'] = df.apply(
    lambda row: f"{row['year'] if len(row['year'])==4 else '20'+row['year']}-{row['month'].zfill(2)}-{row['day'].zfill(2)}", 
    axis=1
)

这段代码还顺便处理了两位年份(自动补成20xx),让日期格式更规范。

方法2:直接列拼接(更高效)

如果你的数据量较大,逐行处理的apply()效率会低一些,直接用Pandas的字符串列拼接更高效:

# 基础拼接
df['merged_date'] = df['month'] + '/' + df['day'] + '/' + df['year']

# 统一格式的拼接
df['merged_date'] = (
    df['year'].apply(lambda y: y if len(y)==4 else '20'+y) 
    + '-' + df['month'].str.zfill(2) 
    + '-' + df['day'].str.zfill(2)
)

注意事项

  • 如果有些行匹配不到日期,提取的列会出现NaN,合并时可以加个判断避免报错:
    df['merged_date'] = df.apply(
        lambda row: f"{row['month']}/{row['day']}/{row['year']}" if pd.notna(row['month']) else None, 
        axis=1
    )
    
  • 正则表达式可以根据你的实际日期格式调整,确保能覆盖所有情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:49:42