Python中如何将整数格式日期转换为Datetime类型
整数日期转Datetime及年份提取解决方案
你的问题出在直接对整数列用切片[0:2]——这会取DataFrame的前2行数据,而不是截取日期数字的前两位,自然得到错误的浮点数结果。下面是完整的解决方法:
1. 先把整数日期转成字符串
要截取日期的年份部分,得先把整数类型的DATE列转为字符串:
df['DATE_str'] = df['DATE'].astype(str)
2. 转换为标准Datetime类型
注意你的数据里有20123124(2020年12月31日24时),但标准Datetime不支持24:00,得先把24替换成00,再给对应行加1天:
import pandas as pd # 替换末尾的24为00,标记需要加天的行 df['DATE_str'] = df['DATE_str'].str.replace('24$', '00') df['need_add_day'] = df['DATE'].astype(str).str.endswith('24') # 按格式转Datetime,%y对应两位年份(自动补20xx) df['datetime'] = pd.to_datetime(df['DATE_str'], format='%y%m%d%H') # 给24点的行加1天,变成次日0点 df.loc[df['need_add_day'], 'datetime'] += pd.Timedelta(days=1)
如果你的日期是4位年份格式,把format改成%Y%m%d%H即可。
3. 提取年份(两种方式)
方式一:从Datetime列直接提取
转成Datetime后,提取年份最省心:
# 提取两位年份(18、20) df['Year_two'] = df['datetime'].dt.year % 100 # 提取四位年份(2018、2020) df['Year_four'] = df['datetime'].dt.year
方式二:直接从字符串提取
如果不想转Datetime,直接从字符串截取:
# 取前两位当两位年份 df['Year_two'] = df['DATE_str'].str[:2].astype(int) # 补成四位年份(这里假设年份是2000年后的,可根据需求调整) df['Year_four'] = 2000 + df['Year_two']
完整测试代码
import pandas as pd # 模拟你的数据 df = pd.DataFrame({'DATE': [18010101, 20123124]}) # 执行转换流程 df['DATE_str'] = df['DATE'].astype(str) df['DATE_str'] = df['DATE_str'].str.replace('24$', '00') df['need_add_day'] = df['DATE'].astype(str).str.endswith('24') df['datetime'] = pd.to_datetime(df['DATE_str'], format='%y%m%d%H') df.loc[df['need_add_day'], 'datetime'] += pd.Timedelta(days=1) df['Year_two'] = df['datetime'].dt.year % 100 df['Year_four'] = df['datetime'].dt.year print(df)
运行后输出:
DATE DATE_str need_add_day datetime Year_two Year_four 0 18010101 18010101 False 2018-01-01 01:00:00 18 2018 1 20123124 20123100 True 2021-01-01 00:00:00 21 2021
内容的提问来源于stack exchange,提问作者Carlos Juvenal
相关产品推荐
相关产品推荐

