如何解决CSV中Excel五位数字日期转换的‘incomplete input’错误?
Excel五位数字日期转换问题解决方法
错误原因分析
你遇到的「incomplete input」错误是因为代码括号不匹配,另外核心问题是日期基准点用错了:
- 原代码里
timedelta(int(x))后面缺少闭合括号,导致语法不完整 - Excel日期的起点是
1900-01-01(数字1对应这天),而你用的datetime.utcfromtimestamp(0)是Unix时间戳起点1970-01-01,两者相差近70年,就算语法修复结果也会完全错误
修正后的代码方案
方案1:修复apply写法
先确保导入依赖库:
import pandas as pd from datetime import datetime, timedelta
然后执行转换:
Cab_Data['Date of Travel'] = Cab_Data['Date of Travel'].apply( lambda x: (datetime(1900, 1, 1) + timedelta(days=int(x)-1)).strftime('%d/%m/%y') )
注:减1是因为Excel把
1900-01-01算作数字1,而timedelta(days=0)才对应这天,所以要减去1天偏移量。输入40055会输出12/03/22,如果需要去掉月份的前导零(变成12/3/22),Windows系统用'%d/%#m/%y',Linux/macOS用'%d/%-m/%y'。
方案2:更高效的pandas矢量化方法
推荐用pd.to_datetime直接处理,比逐行apply效率高得多,尤其适合大数据量:
Cab_Data['Date of Travel'] = pd.to_datetime( Cab_Data['Date of Travel'], unit='D', origin='1900-01-01' ).dt.strftime('%d/%m/%y')
同样可以调整格式字符串来去掉前导零,比如改成'%d/%#m/%y'(Windows)或'%d/%-m/%y'(类Unix系统)。
验证示例
输入数字40055,两种方案都会转换为12/03/22(或你需要的12/3/22,取决于格式字符串),完全符合你的需求。
内容的提问来源于stack exchange,提问作者imhanlahimi wendy
相关产品推荐
相关产品推荐

