You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将DataFrame的数字列转换为日期格式

搞定DataFrame日期列的格式转换问题

先来唠唠你代码报错的原因:

  • 你函数里循环的是col_name(也就是列的名字,是个字符串),压根没遍历到列里的实际日期值!这就导致你判断len(col_name)的时候,其实是在看列名的长度,完全没碰数据,不报错才怪。
  • 字符串切片的逻辑也错了,年份应该是每个日期字符串的最后四位,月份是前面剩下的部分,比如"12018"最后四位是"2018",前面1位是"1";"102018"最后四位是"2018",前面2位是"10"。
  • 你的函数最后只返回了最后一次循环的结果,根本没法处理整列的所有行。

下面给你两种实用的解决方案:

方法一:修正自定义函数+apply批量处理

先把函数改成处理单个日期值的逻辑,再用apply批量作用到列上:

import pandas as pd

# 先构造你的示例数据
df = pd.DataFrame({
    "Date": [12018, 102018, 32018, 122018, 112019, 32019, 42019]
})

def adjust_date(date_val):
    # 先把数字转成字符串,方便切片操作
    date_str = str(date_val)
    day = "01"
    # 年份取最后四位
    year = date_str[-4:]
    # 月份取前面的部分,然后补前导零确保是两位(比如"1"变成"01")
    month = date_str[:-4].zfill(2)
    # 拼接成标准的YYYY-MM-DD格式,后续好转datetime
    return f"{year}-{month}-{day}"

# 把函数应用到Date列,生成格式化后的列
df["Formatted_Date"] = df["Date"].apply(adjust_date)
# 直接转成datetime格式,方便后续时间相关操作
df["Formatted_Date"] = pd.to_datetime(df["Formatted_Date"])

print(df)

运行后Formatted_Date列就是标准的datetime类型,完全符合你的需求。

方法二:用pandas矢量化操作(大数据集更高效)

如果你的数据量很大,用apply效率会有点低,直接用pandas的字符串批量操作更快:

import pandas as pd

df = pd.DataFrame({
    "Date": [12018, 102018, 32018, 122018, 112019, 32019, 42019]
})

# 把数字转成字符串,提取年份和月份
date_str = df["Date"].astype(str)
df["year"] = date_str.str[-4:]
df["month"] = date_str.str[:-4].str.zfill(2)

# 拼接成日期字符串并直接转成datetime
df["Formatted_Date"] = pd.to_datetime(df["year"] + "-" + df["month"] + "-01")

# 可以删掉中间生成的year和month列
df = df.drop(["year", "month"], axis=1)

print(df)

这种方法利用pandas的矢量化特性,比循环快很多,适合处理几十万甚至上百万行的数据。

最终效果验证

处理后每个原始日期对应的结果是:

  • 12018 → 2018-01-01
  • 102018 → 2018-10-01
  • 32018 → 2018-03-01
  • 122018 → 2018-12-01
  • 112019 → 2019-11-01
  • 32019 → 2019-03-01
  • 42019 → 2019-04-01

完美匹配你想要的datetime格式~

内容的提问来源于stack exchange,提问作者pathon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:04:07