在日期范围切片pandas数据帧

G G*_*cia 6 python time-series pandas

我正在使用熊猫来分析财务记录.

我有一个DataFrame来自csv文件,看起来像这样:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 800 entries, 2010-10-27 00:00:00 to 2011-07-12 00:00:00
Data columns:
debit                      800  non-null values
transaction_type           799  non-null values
transaction_date_raw       800  non-null values
credit                     800  non-null values
transaction_description    800  non-null values
account_number             800  non-null values
sort_code                  800  non-null values
balance                    800  non-null values
dtypes: float64(3), int64(1), object(4)
Run Code Online (Sandbox Code Playgroud)

我根据交易金额选择了一个子集:

c1 = df['credit'].map(lambda x: x > 1000)
milestones = df[c1].sort()
Run Code Online (Sandbox Code Playgroud)

并希望根据里程碑之间的日期创建原始df的切片:

delta = dt.timedelta(days=1)
for i in range(len(milestones.index)-1):
        start = milestones.index[i].date()
        end = milestones.index[i+1].date() - delta
        rng = date_range(start, end)
Run Code Online (Sandbox Code Playgroud)

这会生成一个新系列,其中包含我的里程碑之间的日期.

<class 'pandas.tseries.index.DatetimeIndex'>
[2010-11-29 00:00:00, ..., 2010-12-30 00:00:00]
Length: 32, Freq: D, Timezone: None
Run Code Online (Sandbox Code Playgroud)

我已经使用了几种方法来使用这些新系列(rng)切片我的df但是失败了:

df.ix[start:end] or
df.ix[rng]
Run Code Online (Sandbox Code Playgroud)

这引发:IndexError:无效切片

df.reindex(rng) or df.reindex(index=rng)
Run Code Online (Sandbox Code Playgroud)

引发:异常:重新索引仅对具有唯一值的Index对象有效

x = [v for v in rng if v in df.index]
df[x]
df.ix[x]
df.index[x]
Run Code Online (Sandbox Code Playgroud)

这也会引发无效切片,因此:

df.truncate(start, end)
Run Code Online (Sandbox Code Playgroud)

我是熊猫的新手,我正在关注Oreilly的早期版本,并且非常享受它.任何指针将不胜感激.

Cha*_*She 1

看起来您在非唯一索引处理中遇到了一些已知的错误:

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

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

错误修复版本很快就会发布,因此请在一周左右查看 pandas 网站或 PyPI。

谢谢