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

如何合并Pandas对象中的列?多日期列合并方案咨询

合并Pandas日期列的可行方案

别担心,我来分享几个经过验证的方法,帮你把拆分后的年、月、日列合并成完整的日期列,存到新的Pandas对象里~

假设你的原DataFrame名为df,拆分后的三个日期列分别是year、month、day(如果你的列名不同,直接替换即可),下面是几种常用方案:

方法1:直接用pd.to_datetime多列组合(最推荐)

Pandas的pd.to_datetime函数原生支持传入多列(年、月、日)直接转换为日期类型,这是效率最高的方式,尤其适合大型数据集:

import pandas as pd

# 复制原DataFrame到新对象(避免修改原数据)
new_df = df.copy()

# 合并三列为新的日期列
new_df['combined_date'] = pd.to_datetime(new_df[['year', 'month', 'day']])

注意事项:

  • 如果你的列是数值型(int/float),这个方法直接生效;如果是字符串类型,只要内容是合法的数字(比如"2023"、"10")也可以正常转换。
  • 遇到无效日期(比如2月30日)或缺失值时,会自动生成NaT(Not a Time),如果想强制转换并忽略错误,可以加上errors='coerce'参数:
    new_df['combined_date'] = pd.to_datetime(new_df[['year', 'month', 'day']], errors='coerce')
    

方法2:手动拼接字符串后转日期(适合自定义格式)

如果你的日期列存在格式不统一的情况(比如月份是一位数5而不是05),可以先将列转为字符串并补零,再拼接成标准日期格式后转换:

# 将年、月、日列转为字符串,月份和日期补零(确保是两位)
new_df['year_str'] = new_df['year'].astype(str)
new_df['month_str'] = new_df['month'].astype(str).str.zfill(2)
new_df['day_str'] = new_df['day'].astype(str).str.zfill(2)

# 拼接为YYYY-MM-DD格式的字符串,再转日期
new_df['combined_date'] = pd.to_datetime(new_df['year_str'] + '-' + new_df['month_str'] + '-' + new_df['day_str'])

# 清理临时生成的字符串列
new_df = new_df.drop(['year_str', 'month_str', 'day_str'], axis=1)

方法3:用datetime模块逐行处理(适合复杂逻辑)

如果需要对无效日期做自定义处理(比如替换为特定日期而不是NaT),可以结合datetime模块和apply逐行处理(注意:这个方法对超大数据集效率略低,优先用前两种):

from datetime import datetime

def combine_date_rows(row):
    try:
        # 尝试生成日期对象
        return datetime(row['year'], row['month'], row['day'])
    except ValueError:
        # 自定义处理无效日期,比如返回NaT或指定默认日期
        return pd.NaT

new_df['combined_date'] = df.apply(combine_date_rows, axis=1)

你可以根据自己的数据集情况选择合适的方法,如果之前的尝试失败,大概率是列数据类型问题或者存在无效日期,试试加上errors='coerce'参数排查问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:08:01