如何在Python中将仅含年月的浮点列转换为datetime类型?
解决pd.to_datetime解析日期为1970年的问题
你遇到的问题核心在于DATA列的数据类型是浮点数,而非字符串,导致pd.to_datetime把数值当成了Unix时间戳(纳秒单位)解析,才出现了1970年的奇怪日期结果。
解决方案
只需要先把DATA列转换成字符串格式,再用指定规则解析日期即可:
# 第一步:将浮点数列转为字符串,保证格式为YYYY.MM df['DATA'] = df['DATA'].astype(str) # 第二步:按指定格式解析日期 df['DATA'] = pd.to_datetime(df['DATA'], format='%Y.%m')
也可以合并成一行代码简化操作:
df['DATA'] = pd.to_datetime(df['DATA'].astype(str), format='%Y.%m')
执行后,你会得到正确的日期结果(比如2009-06-01,因为没有日的信息,pandas默认会补充当月1号)。
为什么之前会出错?
当pd.to_datetime接收数值类型输入时,它默认会将数值视为Unix时间戳(纳秒单位)。你的2009.06作为浮点数,被解析成了1970年1月1日零点之后的2009.06纳秒(约2微秒),所以才会出现1970-01-01 00:00:00.000002009这种结果。只有当输入是字符串时,format参数才会生效,按照你指定的%Y.%m规则去解析日期。
内容的提问来源于stack exchange,提问作者Marlon Henrique Teixeira
相关产品推荐
相关产品推荐

