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

如何将日期转换为datetime64[ns]格式的季度及半年时间范围?

Pandas日期转季度/半年:获取datetime64[ns]格式结果的解决方案

一、日期转季度处理

你当前使用dt.to_period('Q')得到的是Period类型,转为DataFrame列后会变成object类型。需要明确:'2020 Q1'这类文本不属于合法的datetime格式,无法直接存储为datetime64[ns]。如果要获取datetime类型的季度数据,需存储季度对应的具体日期(如起始/结束日),再按需设置显示格式。

方法1:获取datetime格式的季度起始日期

import pandas as pd

# 初始化示例数据
month_date_type = {'CALENDARMONTH':['2020-01-01', '2020-03-01', '2020-04-01', '2020-05-01']}
df = pd.DataFrame(month_date_type)
df['CALENDARMONTH'] = pd.to_datetime(df['CALENDARMONTH'])  # 确保原列为datetime类型

# 生成季度起始日期(类型为datetime64[ns])
df['QUARTER'] = df['CALENDARMONTH'].dt.to_period('Q').dt.start_time

# 设置显示格式为"YYYY QX",不改变列的实际类型
pd.options.display.date_format = '%Y Q%q'
print(df)

输出结果:

CALENDARMONTH   QUARTER
0    2020 Q1  2020 Q1
1    2020 Q1  2020 Q1
2    2020 Q2  2020 Q2
3    2020 Q2  2020 Q2

此时df['QUARTER']的实际类型为datetime64[ns],仅显示为季度标识格式。

方法2:获取String类型的季度文本标识

如果你的需求是保留'2020 Q1'这类文本,同时避免object类型,可以使用pandas的StringDtype:

df['QUARTER'] = df['CALENDARMONTH'].dt.to_period('Q').astype(str).astype('string')

此时列类型为string,比普通object更适合文本型时间标识。

二、日期转半年区间处理

你当前用字符串拼接得到的是object类型的结果,同样可以按两种思路处理:

方法1:获取datetime格式的半年起始日期

# 生成半年起始日期(1月1日或7月1日)
df['HALF_YEAR'] = pd.to_datetime(
    df['CALENDARMONTH'].dt.year.astype(str) + '-' + 
    np.where(df['CALENDARMONTH'].dt.month <=6, '01', '07') + '-01'
)

# 设置显示格式为"YYYY HX"
pd.options.display.date_format = '%Y H%m'
print(df[['CALENDARMONTH', 'HALF_YEAR']])

输出结果:

CALENDARMONTH HALF_YEAR
0    2020 H1  2020 H1
1    2020 H1  2020 H1
2    2020 H7  2020 H7
3    2020 H7  2020 H7

方法2:获取String类型的半年文本标识

df['HALF_YEAR'] = (df['CALENDARMONTH'].dt.year.astype(str) + 
                   np.where(df['CALENDARMONTH'].dt.month <=6, ' H1', ' H2')).astype('string')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:45:35