pandas拼接年月列时月份前导零缺失问题如何解决
问题原因
拆分得到的月份列为数值类型时,直接转字符串不会保留1-9月的前导零:例如6月转字符串后是"6"而非"06",拼接后就会出现20006这类缺位结果。
解决方案
方案1:适配你当前已拆分好年、月、日列的场景
用str.zfill(2)给转成字符串的月份自动补前导零,固定长度为2位:
df["period"] = df["y"].astype(str) + df["m"].astype(str).str.zfill(2)
该方法对10-12月的两位月份无影响,"10"、"12"这类值经过处理后不会发生变化。
方案2:从根源避免手动拼接的格式问题
你之前pandas.to_datetime()解析失败,是因为没有指定日期格式规则:你的原始数据是日/月/年格式,默认解析逻辑按美式「月/日/年」识别,遇到14、25这类大于12的数值就会报错。只要指定dayfirst=True参数即可正常解析,不需要手动拆分列,后续生成周期字段直接调用日期格式化方法即可,自动补全前导零:
# 直接解析原始日期列 df["parsed_date"] = pd.to_datetime(df["你的原始日期列名"], dayfirst=True) # 生成YYYYMM格式的周期字段 df["period"] = df["parsed_date"].dt.strftime("%Y%m")
该方案容错性更高,不会出现手动拼接时的位数错误。
内容的提问来源于stack exchange,提问作者user15788706
相关产品推荐
相关产品推荐

