删除日期不在索引的某个范围内

时间:2017-11-30 20:17:13

标签: python pandas dataframe

我有一个像这样的DataFrame:

Date                 X
....
2014-01-02 07:00:00 16
2014-01-02 07:15:00 20
2014-01-02 07:30:00 21
2014-01-02 07:45:00 33
2014-01-02 08:00:00 22
....
2014-01-02 23:45:00 0
....

1) 所以我的“日期”列是一个日期时间,并且每天15分钟都有值。

我想要的是删除时间不在08:00到18:00之间的所有行。

2) 数据中缺少某些日子...我怎么能把丢失的日子放在我的数据框中,并用0作为X填充它们。

我的方法:在两个日期之间创建一个新系列,并将15分钟设置为频率,并使用新创建的系列连接我的X列。是吗?

编辑: 我的第二个问题的问题:

#create new full DF without missing dates and reindex
full_range = pandas.date_range(start='2014-01-02', end='2017-11-
14',freq='15min') 
df = df.reindex(full_range,fill_value=0)

df.head()

输出:

                    Date        X
2014-01-02 00:00:00 1970-01-01  0
2014-01-02 00:15:00 1970-01-01  0
2014-01-02 00:30:00 1970-01-01  0
2014-01-02 00:45:00 1970-01-01  0
2014-01-02 01:00:00 1970-01-01  0

如你所见,那没有用。

“日期”列不是索引顺便说一句。我需要它作为我的df中的列

他为什么选择“1970-01-01”? 1970年对我来说毫无意义

1 个答案:

答案 0 :(得分:2)

  

我想要的是删除时间不在08:00之间的所有行   和18:00 o时钟。

使用datetime.time创建一个掩码。例如:

from datetime import time

idx = pd.date_range('2014-01-02', freq='15min', periods=10000)
df = pd.DataFrame({'x': np.empty(idx.shape[0])}, index=idx)
t1 = time(8); t2 = time(18)
times = df.index.time
mask = (times > t1) & (times < t2)
df = df.loc[mask]
  

数据中缺少某些日子...我怎么能把丢失的日子丢掉   在我的DataFrame中,用值0填充它们作为X?

  1. 使用pd.date_range()构建一个不会丢失数据的日期范围(见上文)。
  2. df上致电reindex()并指定fill_value=0
  3. 在评论中回答您的问题:

    • np.empty创建一个空数组。我只是用它来构建一些&#34;例子&#34;数据基本上是垃圾。这里idx.shape是索引的形状(长度,宽度),元组。因此np.empty(idx.shape[0])创建一个空的1d数组,其长度与idx相同。
    • times = df.index.time创建一个名为times的变量(NumPy数组)。 df.index.time是索引df中每个元素的时间。您可以自己探索这个问题,只需将代码分解成碎片并自行尝试即可。