如何用Pandas read_excel保留dd/mm/yyyy格式日期为字符串不解析?
问题:读取Excel日期列时无法保留原始字符串格式
我有一份Excel文件,其中「Created Date」列显示格式为dd/mm/yyyy,单元格数据类型设为general。尝试用pandas读取该文件,希望将此列保留为原始字符串格式、不解析日期,但多次尝试都出现问题:
尝试的方法及错误结果
方法1:使用converters参数指定转换为字符串
df = pd.read_excel(f_in ,converters={'Created Date': str} ,engine='openpyxl')
方法2:使用dtype参数指定字符串类型
df = pd.read_excel(f_in ,dtype={'Created Date': str} ,engine='openpyxl')
两种方法得到的结果均不符合预期:第一行日期被错误解析为mm/dd/yyyy格式后转为字符串,而非保留原始的dd/mm/yyyy格式:
for ee in df['Created Date'][0:3]: print(ee, type(ee), '\n') # 输出结果 2019-04-11 00:00:00 <class 'str'> ## 此日期被错误解析后转字符串,未保留原样 18/11/2019 <class 'str'> 25/11/2019 <class 'str'>
方法3:添加parse_dates=False参数
df = pd.read_excel(f_in ,parse_dates=False ,engine='openpyxl')
结果第一行直接被解析为datetime类型,依然不符合要求:
# 输出结果 2019-04-11 00:00:00 <class 'datetime.datetime'> 18/11/2019 <class 'str'> 25/11/2019 <class 'str'>
解决方法
经排查发现,Excel中「Created Date」列的首个单元格实际是Date类型,并非设置的general类型。将整列统一改为general类型后,再次使用parse_dates=False读取:
df = pd.read_excel(f_in ,parse_dates=False ,engine='openpyxl')
得到如下结果:
# 输出结果 43566 <class 'int'> 18/11/2019 <class 'str'> 25/11/2019 <class 'str'>
此时可以根据数据类型(判断是否为int)或是否包含/,将Excel日期序列号和字符串格式的日期统一转换为datetime类型。
内容的提问来源于stack exchange,提问作者YJZ
相关产品推荐
相关产品推荐

