Python中将YYYYDDMM格式日期转换为YYYYMMDD格式的问题求助
问题解决方法
核心问题
你用pd.to_datetime()转换日期时没指定格式,pandas默认把20220408识别成了YYYYMMDD(2022年4月8日),但你的实际数据是YYYYDDMM(2022年8月4日),所以后续的格式转换完全没达到预期。
正确操作步骤
第一步:正确解析日期格式
转换datetime时必须指定format="%Y%d%m",明确告诉pandas原始字符串是「年-日-月」的结构:filtered_df['Effective Date'] = pd.to_datetime(filtered_df['Effective Date'], format="%Y%d%m")这一步会把
20220408正确解析为2022年8月4日的datetime对象。第二步:转成YYYYMMDD格式字符串
现在再用dt.strftime("%Y%m%d")就能得到你要的格式:filtered_df['Effective Date new'] = filtered_df['Effective Date'].dt.strftime("%Y%m%d")此时
Effective Date new的值就是20220804。第三步:减去1个工作日
用pandas的BDay偏移量来实现自动跳过周末的工作日减法:# 得到datetime类型的结果 filtered_df['Effective Date minus 1 workday'] = filtered_df['Effective Date'] - pd.offsets.BDay(1) # 如果需要转成字符串格式,再加strftime filtered_df['Effective Date minus 1 workday'] = (filtered_df['Effective Date'] - pd.offsets.BDay(1)).dt.strftime("%Y%m%d")
完整代码示例
import pandas as pd # 模拟你的数据 filtered_df = pd.DataFrame({'Effective Date': ['20220408']}) # 正确解析日期 filtered_df['Effective Date'] = pd.to_datetime(filtered_df['Effective Date'], format="%Y%d%m") # 转换为YYYYMMDD格式 filtered_df['Effective Date new'] = filtered_df['Effective Date'].dt.strftime("%Y%m%d") # 减去1个工作日并转成字符串 filtered_df['Effective Date minus 1 workday'] = (filtered_df['Effective Date'] - pd.offsets.BDay(1)).dt.strftime("%Y%m%d") print(filtered_df)
输出结果:
Effective Date Effective Date new Effective Date minus 1 workday 0 2022-08-04 20220804 20220803
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

