2

我是 python 和 pandas 的新手。我有一个日期时间索引数据框。我想选择时间 > 08:00:00 我尝试使用 pd.DataFrame.select 函数的行。它失败是因为索引有重复的条目。

我尝试正确吗?

有办法解决吗?

使用重复条目索引数据是一种不好的做法吗?

>>> df.head(10)
                            A
time                         
1900-01-01 00:01:01.456170  0
1900-01-01 00:01:01.969600  0
1900-01-01 00:01:04.305494  0
1900-01-01 00:01:13.860365  0
1900-01-01 00:01:19.666371  0
1900-01-01 00:01:24.920744  0
1900-01-01 00:01:24.931466  0
1900-01-01 00:02:07.522741  0
1900-01-01 00:02:13.857793  0
1900-01-01 00:02:34.817765 -7
>>> timeindexvalid = lambda x : x.to_datetime() > datetime(1900, 1, 1, 8)
>>> df.select(timeindexvalid)
Traceback (most recent call last):

    raise Exception('Reindexing only valid with uniquely valued Index '
Exception: Reindexing only valid with uniquely valued Index objects
4

3 回答 3

2

您可以使用表达式来选择所需的索引,而无需使用select()

In [1]: df
Out[1]:
            A
time
2012-05-01  0
2012-05-02  1
2012-05-02  2

In [2]: df.index
Out[2]:
<class 'pandas.tseries.index.DatetimeIndex'>

In [3]: df.index.is_unique
Out[3]: False

In [4]: df[df.index > datetime(2012,5,1)]
Out[4]:
            A
time
2012-05-02  1
2012-05-02  2

使用选择复制您的错误:

In [5]: sel = lambda x: x > datetime(2012,5,1)

In [6]: df.select(sel)
Exception: Reindexing only valid with uniquely valued Index objects
于 2013-01-05T23:51:48.943 回答
1

我在 GitHub 上做了一个注释,以便使用以下方法更轻松地支持这一点between_time

https://github.com/pydata/pandas/issues/2826

于 2013-02-09T20:17:12.630 回答
0

您可以使用indexer_between_time(在午夜 1 分钟到 2 分钟之间):

In [11]: df1.iloc[df1.index.indexer_between_time('00:01:00', '00:02:00')]
Out[11]:
                            A
time
1900-01-01 00:01:01.456170  0
1900-01-01 00:01:01.969600  0
1900-01-01 00:01:04.305494  0
1900-01-01 00:01:13.860365  0
1900-01-01 00:01:19.666371  0
1900-01-01 00:01:24.920744  0
1900-01-01 00:01:24.931466  0
于 2014-05-29T06:01:50.920 回答