从Excel读入日期转为序列值,如何转换为月/日/年格式?
Excel日期序列值转换为月/日/年格式的解决方法
首先明确核心逻辑:你读到的43901.84这类数值是Excel原生的日期存储格式,整数部分代表从Excel固定起点到对应日期的天数,小数部分代表当天的时间占比(1代表完整一天24小时),和你原始记录的3/11/2020 8:12:00 PM、3/12/2020 7:13:00 PM是完全对应匹配的,不存在数据损坏的问题。
不同使用场景的操作方案
场景1:直接在Excel文件内完成转换
- 选中所有存储了序列值的单元格区域
- 右键打开「设置单元格格式」面板
- 方法一:在「日期」分类下,直接选择格式为
月/日/年的预设样式确认即可 - 方法二:如果需要精准控制格式,选「自定义」分类,在格式输入框中填入
mm/dd/yyyy,确认后即可输出完全匹配要求的格式
- 方法一:在「日期」分类下,直接选择格式为
场景2:用Python(pandas)读取文件后完成转换
多数情况下读入时日期变成数值,是因为读取时未触发自动日期解析,可直接通过内置方法做精准转换:
import pandas as pd # 读取Excel文件 df = pd.read_excel("你的数据集文件路径.xlsx") # 对存序列值的列做日期转换,origin参数适配Excel的历史1900闰年bug df["日期时间列"] = pd.to_datetime(df["日期时间列"], unit="D", origin="1899-12-30") # 按需求格式生成月/日/年格式的日期字符串 df["格式化日期"] = df["日期时间列"].dt.strftime("%m/%d/%Y")
注意:不要把origin参数设为
1900-01-01,因为Excel存在历史遗留bug,错误将1900年识别为闰年,多计入了1天的偏移,用1899-12-30作为转换原点,才能保证转换结果和原Excel显示的日期完全一致,不会出现日期差1天的问题。
常见踩坑提示
- 不要用手动计算“数值/365+年份起点”的方式换算,很容易因为闰年、历史bug出现日期偏移
- 如果转换后日期和实际差1天,优先检查origin参数是否匹配Excel的存储规则
- 你提供的43901.84通过上述方法转换后,结果正好是2020-03-11 20:12,43902.80转换后是2020-03-12 19:12,和你原始记录的日期时间完全对应
内容的提问来源于stack exchange,提问作者T.McMillen
相关产品推荐
相关产品推荐

