如何在Python中合并DataFrame的年、月、日三列生成时间序列?
合并DataFrame年/月/日列为时间序列格式的方法
嘿,这个需求在时间序列预处理里太常见了!我给你分享几个实用的方案,都是基于pandas的,你可以根据自己的场景选:
方法1:直接用pd.to_datetime构造时间类型(最推荐)
这是最省心的方式,pandas的to_datetime函数可以直接接收包含年、月、日的列作为参数,自动生成标准的datetime64类型列——这可是后续时间序列分析的最佳格式(比如做重采样、滑动窗口都直接能用)。
代码示例:
import pandas as pd # 假设你的DataFrame名为df,列名分别是「年份」「月份」「日期」 df['合并日期'] = pd.to_datetime(df[['年份', '月份', '日期']])
这个方法还会自动校验日期合法性(比如2月30号这种无效日期会报错,你可以通过errors='coerce'参数把无效值转成NaT),比手动拼接字符串靠谱多了。
方法2:手动拼接成字符串格式(按需使用)
如果你确实需要先得到「年-月-日」格式的字符串列,可以用字符串拼接,但记得要补全月/日的前导零,保证格式统一:
# 先把数值类型的年/月/日转成字符串,并用zfill(2)补零 df['日期字符串'] = ( df['年份'].astype(str) + '-' + df['月份'].astype(str).str.zfill(2) + '-' + df['日期'].astype(str).str.zfill(2) ) # 如果之后要转成时间类型,只需要再跑一遍: # df['合并日期'] = pd.to_datetime(df['日期字符串'])
方法3:用apply自定义拼接(不推荐大数据量)
这个方法灵活性高,但效率偏低,数据量大的时候不建议用:
df['合并日期'] = df.apply( lambda row: f"{row['年份']}-{row['月份']:02d}-{row['日期']:02d}", axis=1 ) # 同样,转成时间类型还是要靠pd.to_datetime df['合并日期'] = pd.to_datetime(df['合并日期'])
总结一下:优先选方法1,直接生成datetime类型,后续时间序列操作一步到位;如果有特殊格式需求再考虑方法2,方法3只适合小数据量的临时处理。
内容的提问来源于stack exchange,提问作者k.vil
相关产品推荐
相关产品推荐

