我遇到了以下版本的奇怪问题:
0.14.1
3.4.1 :: Anaconda 2.0.1 (x86_64)
我有以下系列(可用数据here)
> my_series.head()
timestamp
2014-10-14 19:00:05.861000-04:00 6.4400
2014-10-14 19:00:07.094000-04:00 6.4400
2014-10-14 19:00:07.109000-04:00 5.9584
2014-10-14 19:00:07.211000-04:00 6.2160
2014-10-14 19:00:07.410000-04:00 6.4400
Name: quantity, dtype: float64
索引为DatetimeIndex
:
> my_series.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-10-14 19:00:05.861000-04:00, ..., 2014-10-14 19:06:35.307000-04:00]
Length: 2042, Freq: None, Timezone: US/Eastern
索引有重复(我需要那些条目):
> my_series.index.get_duplicates()
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-10-14 23:00:10.825000, ..., 2014-10-14 23:05:49.029000]
Length: 65, Freq: None, Timezone: None
现在,假设我想使用pandas.tseries.indexDatetimeIndex
对象ts
在特定时间点对此系列进行抽样:
> import arrow
> start_time = arrow.get(2014, 10, 14, hour = 19, tzinfo='US/Eastern')
> end_time = start_time.replace(seconds=400)
> ts = pd.date_range(start=start_time.isoformat(),
end=end_time.isoformat(),
freq='2200L')
请注意:
> start_time.isoformat()
2014-10-14T19:00:00-04:00
> end_time.isoformat()
2014-10-14T19:06:40-04:00
和
> ts
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-10-14 19:00:00-04:00, ..., 2014-10-14 19:06:40.400000-04:00]
Length: 183, Freq: 2200L, Timezone: tzoffset(None, -14400)
当我对它进行采样时:
> my_series[ts].head()
1413327600000000000 NaN
1413327602200000000 NaN
1413327604400000000 NaN
1413327606600000000 NaN
1413327608800000000 NaN
Name: quantity, dtype: float64
我得到了一个由int64
索引编制索引的系列,以及不 DatetimeIndex
索引(来自ts
),我期望:
> my_series.ix[ts].index
Int64Index([1412636400000000000, 1412636402200000000, ...], dtype='int64')
有趣的是,int64
指数似乎是“正确的”。如果我这样做:
my_series.ix[ts].index = pd.to_datetime(my_series.ix[ts].index).tz_localize('UTC').tz_convert('US/Eastern')
我可以解决问题。
为什么它会返回int64
而不是DatetimeIndex
?如何将其转换为后者?
答案 0 :(得分:1)
这里是我看到的输入(来自泡菜,来自上面生成的ts),但不确定是什么箭头;我是从isostrings生成的
In [42]: ts
Out[42]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-10-14 19:00:00-04:00, ..., 2014-10-14 19:06:40.400000-04:00]
Length: 183, Freq: 2200L, Timezone: pytz.FixedOffset(-240)
In [43]: s.index
Out[43]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-10-14 19:00:05.861000-04:00, ..., 2014-10-14 19:06:35.307000-04:00]
Length: 2042, Freq: None, Timezone: US/Eastern
您没有任何重叠值
In [41]: s.index.tz_convert('UTC').isin(ts.tz_convert('UTC')).any()
Out[41]: False
我无法重现索引不是DatetimeIndex的错误。请注意,这是在0.15.0(今天发布)。对于tz类型的东西,已经进行了很多修复。
你正在做一个奇怪的比较,无论如何都不会工作。为了选择/重新索引这些必须是相同的tz,否则它没有任何意义。