Pandas date_range 不一致的行为

5
使用 pandas(版本 13.1)中的 date_range 函数时,我发现在返回的范围内 'end' 是否包含在内存在不一致的行为:
In [1]: pd.date_range(start='2014-06-09 15:36:55', 
                      end='2014-06-09 15:37:46', 
                      freq='20s')
Out[1]: [2014-06-09 15:36:55, ..., 2014-06-09 15:37:55]

并且
In [2]: pd.date_range(start='2014-06-09 15:36:55', 
                      end='2014-06-09 15:37:46', 
                      freq='10s')
Out[2]: [2014-06-09 15:36:55, ..., 2014-06-09 15:37:45]

请注意,在第一种情况下,最后一个时间比指定的“结束”时间要晚,而在第二种情况下,最后一个时间较小。有人能解释一下吗?

1
我猜测它是四舍五入到最近的频率边界。46比35(20秒前)更接近55,但更接近于45到55。然而,我同意这是令人困惑的行为。值得在pandas邮件列表上询问和/或在跟踪器中提出错误报告。 - BrenBarn
1
我的猜测是当 current < end 时会产生下一个(所以它会多生成一个),但我不太清楚这是从哪里来的。一定要在 GitHub 上发布一份问题报告。 - Andy Hayden
1个回答

1
我相信这个问题已经在某个版本中得到了解决。现在的date_range行为是一致的,始终包括startDatetimeIndex的结尾总是<=end。输出格式也变得更加漂亮。
以下代码使用pandas 0.17.0:
In [1]: import pandas as pd

In [2]: pd.date_range(start='2014-06-09 15:36:55', 
   ...:                       end='2014-06-09 15:37:46', 
   ...:                       freq='20s')
Out[2]: 
DatetimeIndex(['2014-06-09 15:36:55', '2014-06-09 15:37:15',
               '2014-06-09 15:37:35'],
              dtype='datetime64[ns]', freq='20S')

In [3]: pd.date_range(start='2014-06-09 15:36:55', 
                      end='2014-06-09 15:37:46', 
                      freq='10s')
Out[3]: 
DatetimeIndex(['2014-06-09 15:36:55', '2014-06-09 15:37:05',
               '2014-06-09 15:37:15', '2014-06-09 15:37:25',
               '2014-06-09 15:37:35', '2014-06-09 15:37:45'],
              dtype='datetime64[ns]', freq='10S')

In [4]: pd.date_range(start='2014-06-09 15:36:55', 
                      end='2014-06-09 15:37:46', 
                      freq='15s')
Out[4]: 
DatetimeIndex(['2014-06-09 15:36:55', '2014-06-09 15:37:10',
               '2014-06-09 15:37:25', '2014-06-09 15:37:40'],
              dtype='datetime64[ns]', freq='15S')

In [5]: pd.date_range(start='2014-06-09 15:36:55', 
                      end='2014-06-09 15:37:46', 
                      freq='1s')
Out[5]: 
DatetimeIndex(['2014-06-09 15:36:55', '2014-06-09 15:36:56',
                   ......                    ......
               '2014-06-09 15:37:45', '2014-06-09 15:37:46'],
              dtype='datetime64[ns]', freq='S')

请注意,DatetimeIndex的结束时间永远不会超过date_rangeend日期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接