【问题标题】:Pandas DatetimeIndex strange behaviourPandas DatetimeIndex 奇怪的行为
【发布时间】:2016-09-27 09:11:16
【问题描述】:

我处理一个DataFrame,索引为字符串,年月,例如:

index = ['2007-01', '2007-03', ...]

但是,索引未满。例如2007-02 不见了。 我想要的是用完整索引重新索引 DataFrame。

我尝试过的:

In [60]: pd.DatetimeIndex(start='2007-01', end='2007-12', freq='M')
Out[60]: 
DatetimeIndex(['2007-01-31', '2007-02-28', '2007-03-31', '2007-04-30',
           '2007-05-31', '2007-06-30', '2007-07-31', '2007-08-31',
           '2007-09-30', '2007-10-31', '2007-11-30'],
          dtype='datetime64[ns]', freq='M')

索引是每个月的月底。

In [64]: pd.DatetimeIndex(['2007-01', '2007-03', '2007-04', '2007-05'])
Out[64]: DatetimeIndex(['2007-01-01', '2007-03-01', '2007-04-01', '2007-05-01'],    dtype='datetime64[ns]', freq=None)

索引是每个月的开始。

如何处理这个问题?

【问题讨论】:

  • 'M' 频率是月末,开始使用 'MS' 作为月初,请参阅 docs

标签: python pandas date-range period datetimeindex


【解决方案1】:

如果需要每月第一天的频率,我认为您需要添加参数freq='MS'

print (pd.DatetimeIndex(start='2007-01', end='2007-12', freq='MS'))
DatetimeIndex(['2007-01-01', '2007-02-01', '2007-03-01', '2007-04-01',
               '2007-05-01', '2007-06-01', '2007-07-01', '2007-08-01',
               '2007-09-01', '2007-10-01', '2007-11-01', '2007-12-01'],
              dtype='datetime64[ns]', freq='MS')

链接到Offset Aliases in pandas documentation,谢谢EdChum

另一种解决方案是使用PeriodIndex 生成月份:

print (pd.PeriodIndex(start='2007-01', end='2007-12', freq='M'))
PeriodIndex(['2007-01', '2007-02', '2007-03', '2007-04', '2007-05', '2007-06',
             '2007-07', '2007-08', '2007-09', '2007-10', '2007-11', '2007-12'],
            dtype='int64', freq='M')

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2022-01-14
    • 2018-11-25
    • 2021-03-12
    • 1970-01-01
    • 2017-11-15
    • 2022-01-13
    • 2018-09-21
    相关资源
    最近更新 更多