在熊猫中对时间序列中的非连续日期进行切片

时间:2018-08-28 15:56:00

标签: python pandas time-series slice

我想分割出熊猫时间序列中的非连续日期。我可以提取单个日期,并且可以对连续日期执行相同的操作,但是当我尝试提取非连续日期时,我将失败。下面出于重复目的,我给出了一个玩具数据集和我的代码。

toy_data.to_json()
'{"MMM":{"1459382400000":7335000000.0,"1467244800000":7493333333.3333330154,"1475193600000":7677666666.6666669846,"1483142400000":7582333333.3333330154,"1490918400000":7447666666.6666669846,"1498780800000":7726666666.6666669846,"1506729600000":7930666666.6666669846,"1514678400000":8111333333.3333330154,"1522454400000":7990000000.0,"1530316800000":7990000000.0},"AOS":{"1459382400000":638566666.6666666269,"1467244800000":646933333.3333333731,"1475193600000":672633333.3333333731,"1483142400000":688633333.3333333731,"1490918400000":712066666.6666666269,"1498780800000":739400000.0,"1506729600000":742100000.0,"1514678400000":756133333.3333333731,"1522454400000":768600000.0,"1530316800000":768600000.0}}'

toy_data.loc['2018-06-30']
Company
MMM    7.990000e+09
AOS    7.686000e+08
Name: 2018-06-30 00:00:00, dtype: float64

toy_data.loc[['2018-06-30', '2017-06-30']]
KeyError: "None of [['2018-06-30', '2017-06-30']] are in the [index]"

您的建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于您的index是日期时间格式,因此它将失败,请尝试转换为str

df.index=df.index.astype(str)
df.loc[['2018-06-30', '2017-06-30']]
Out[193]: 
                    AOS           MMM
2018-06-30  768600000.0  7.990000e+09
2017-06-30  739400000.0  7.726667e+09

答案 1 :(得分:0)

您正尝试使用str类型的定位符查询数据框。请注意,您的索引的类型为datetime64

toy_data.index.dtype

收益:

datetime64[ns]

您需要重铸为str

toy_data.index = toy_data.index.astype(str)

然后您可以使用str类型进行查询:

toy_data.loc[['2017-06-30', '2018-06-30']]

哪个给:

                     MMM          AOS
2017-06-30  7.726667e+09  739400000.0
2018-06-30  7.990000e+09  768600000.0