Pandas列操作后如何保留前导零?日期列提取年月份为规范数字格式
你原有代码出错的核心原因是切片范围错误,YYYY-MM-DD格式的字符串中,月份占据第5、6两个索引位置(索引从0开始计数,遵循左闭右开规则),你仅取了索引6的单个字符,自然丢失了月份的前导零。
以下是两种高效的向量化实现方案,性能远高于手动循环:
方案1:修正字符串切片(性能最优)
直接调整切片范围取完整两位月份,拼接后转整数即可,适合日期格式100%统一的场景:
# 适配无多余引号的日期格式:2021-01-01 df['period'] = (df['Date'].str[:4] + df['Date'].str[5:7]).astype(int)
如果你的原始Date列两端带单引号,调整切片偏移量即可:
# 适配带单引号的日期格式:'2021-01-01' df['period'] = (df['Date'].str[1:5] + df['Date'].str[6:8]).astype(int)
方案2:转datetime类型处理(容错性最高)
如果不能保证所有日期字符串格式完全统一,建议先转成pandas内置的datetime类型再格式化,可自动适配多种常用日期格式:
import pandas as pd # 转换日期格式,errors参数可设置为'coerce'将异常日期转为空值 df['Date'] = pd.to_datetime(df['Date'], errors='raise') # 格式化为YYYYMM字符串后转整数 df['period'] = df['Date'].dt.strftime('%Y%m').astype(int)
两种方案均为pandas原生向量化操作,处理百万级行数据仅需毫秒级耗时。
内容的提问来源于stack exchange,提问作者trojan horse
相关产品推荐
相关产品推荐

