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会变成这样:
| date | open | high | low | close | volume | year | month | year_month | year_month_str |
|---|---|---|---|---|---|---|---|---|---|
| 2019-01-07 00:00:00 | 101.64 | 103.2681 | 100.9800 | 102.06 | 35656136.0 | 2019 | 1 | 2019-01 | 2019-01 |
| 2019-01-08 00:00:00 | 103.04 | 103.9700 | 101.7134 | 102.80 | 31294058.0 | 2019 | 1 | 2019-01 | 2019-01 |
完全符合你的需求哦!
内容的提问来源于stack exchange,提问作者Chidu Murthy
相关产品推荐
相关产品推荐

