如何从Pandas DataFrame的datetime类型列高效提取年、月、日?
优化Pandas提取日期年/月/日的方法
嘿,你的这个实现完全没问题,但其实Pandas有更高效、更简洁的原生方法来搞定这个需求!
你现在用的apply+lambda虽然能实现功能,但本质是逐行循环处理,当数据集很大的时候,性能会不如Pandas专门为datetime列设计的dt访问器。而且用dt的话,代码也更清爽,不用写重复的lambda语句。
第一种优化方式:直接用dt访问器赋值
这是最直观的改进,直接通过dt访问器获取日期的年、月、日属性:
data['MFR_YEAR'] = data['MFR_DATE'].dt.year data['MFR_MONTH'] = data['MFR_DATE'].dt.month data['MFR_DAY'] = data['MFR_DATE'].dt.day
第二种更紧凑的方式:用assign一次性生成多列
如果你想让代码更连贯,避免多次单独赋值,也可以用assign方法一次性完成所有新列的添加:
data = data.assign( MFR_YEAR=data['MFR_DATE'].dt.year, MFR_MONTH=data['MFR_DATE'].dt.month, MFR_DAY=data['MFR_DATE'].dt.day )
这两种方法的核心都是利用Pandas的向量化操作,比逐行循环的apply性能提升不少——尤其是处理几十万甚至上百万行数据的时候,性能差距会非常明显。同时代码可读性也更高,别人一眼就能看懂你是在提取日期的各个组成部分。
内容的提问来源于stack exchange,提问作者smishra
相关产品推荐
相关产品推荐

