我有一个像这样的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年对我来说毫无意义
答案 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?
pd.date_range()
构建一个不会丢失数据的日期范围(见上文)。df
上致电reindex()
并指定fill_value=0
。在评论中回答您的问题:
np.empty
创建一个空数组。我只是用它来构建一些&#34;例子&#34;数据基本上是垃圾。这里idx.shape
是索引的形状(长度,宽度),元组。因此np.empty(idx.shape[0])
创建一个空的1d数组,其长度与idx
相同。times = df.index.time
创建一个名为times
的变量(NumPy数组)。 df.index.time
是索引df
中每个元素的时间。您可以自己探索这个问题,只需将代码分解成碎片并自行尝试即可。