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

Pandas从DataFrame提取日期调用period_range返回空索引问题

问题说明

需要从DataFrame中提取起止日期,传入period_range()生成指定范围的月度周期,实际运行后返回空的PeriodIndex([], dtype='period[M]'),不符合预期。

错误根因

核心问题出在日期解析环节:

  • 原始日期字符串是日-月-年格式,调用pd.to_datetime()时没有显式指定解析规则,依赖pandas自动推断格式。
  • 起始日期字符串26-06-2021中第一个数字26不可能作为月份有效值,pandas自动按日-月-年解析为2021年6月26日;但结束日期字符串02-07-2021中02、07都可作为月/日有效值,pandas按默认的月-日-年规则解析为2021年2月7日。
  • 最终传入period_range()的起始时间晚于结束时间,函数无法生成有效时间序列,因此返回空结果。
  • 额外冗余问题:无需将解析后的日期对象再转成字符串传入period_range(),直接传入时间类型对象即可,减少不必要的格式转换。
修正代码
import pandas as pd
import numpy as np
from datetime import datetime

datas=[['project1','26-06-2021','02-07-2021']]
cols=['project','startdate','enddate']
data1=pd.DataFrame(data=datas,columns=cols)
print(data1.head())

# 显式指定dayfirst=True,或指定format='%d-%m-%Y',统一日期解析规则
start_dt = pd.to_datetime(data1['startdate'][0], dayfirst=True)
end_dt = pd.to_datetime(data1['enddate'][0], dayfirst=True)
# 直接传入时间对象生成月度周期
month_range = pd.period_range(start_dt, end_dt, freq='M')
print(month_range)
运行结果
project   startdate     enddate
0  project1  26-06-2021  02-07-2021
PeriodIndex(['2021-06', '2021-07'], dtype='period[M]')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:48:17