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
相关产品推荐
相关产品推荐

