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

Pandas:如何从Datetime类型DataFrame索引中提取年月

解决Datetime索引的DataFrame提取年份和月份的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题是:你的日期是DataFrame的索引,而不是普通的列,所以直接用df["date"]或者df["index"]去访问肯定行不通,得直接对索引本身操作才行。

下面给你两种实用的解决方法,根据你的需求选就行:

方法一:直接操作Datetime索引(推荐,保留原索引)

既然你的索引已经是Datetime类型了,直接通过df.index调用对应的属性就能提取年份和月份,还能直接添加成新列:

# 提取年份到新列
df['year'] = df.index.year
# 提取月份到新列
df['month'] = df.index.month
# 如果想要YYYY-MM格式的年月组合(比如2019-01)
df['year_month'] = df.index.to_period('M')
# 要是需要字符串格式的年月,转一下就行
df['year_month_str'] = df.index.to_period('M').astype(str)

运行后你的DataFrame就会新增这些列,原有的Datetime索引也会保留,完全不影响后续的时间序列操作。

方法二:把索引转成普通列再操作

如果你更习惯用列的方式处理日期,可以先把索引转成普通列,再用dt属性提取:

# 将索引转为名为'date'的普通列,原索引会被替换成默认的整数索引
df = df.reset_index()
# 现在就可以用dt属性提取年份和月份了
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month

这种方法适合后续需要把日期当作普通数据列来处理的场景。

举个例子,用你给出的示例数据,运行方法一之后,DataFrame会变成这样:

dateopenhighlowclosevolumeyearmonthyear_monthyear_month_str
2019-01-07 00:00:00101.64103.2681100.9800102.0635656136.0201912019-012019-01
2019-01-08 00:00:00103.04103.9700101.7134102.8031294058.0201912019-012019-01

完全符合你的需求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:26:38