如何在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
相关产品推荐
相关产品推荐

