从熊猫数据框中过滤一天

时间:2019-10-04 13:02:34

标签: python pandas

尝试从数据中过滤掉一天,当我尝试运行代码时,我没有得到任何结果(这是不准确的,因为那天有数据)。

这是我正在使用的代码:

a['datetime'] = pd.to_datetime(a['datetime'])
start_date = pd.to_datetime('2019-09-01')
end_date = pd.to_datetime('2019-10-01')
sept = a[a['datetime'].between(start_date, end_date)]
day1 = pd.to_datetime('2019-09-11')
(sept['datetime'] == day1).sum()

这是我的数据样本

3         2019-09-11 06:59:02.715641
13        2019-09-12 11:16:53.061871
24        2019-09-02 06:50:37.347313
27034     2019-09-15 11:57:34.582988
27163     2019-09-01 13:38:34.169917
31708     2019-09-17 07:45:50.693893
32883     2019-09-06 13:27:56.161920
33645     2019-09-17 10:02:11.010567
33657     2019-09-01 15:55:42.492608
57825     2019-09-17 11:25:19.405100
57836     2019-09-04 20:12:10.853341
57837     2019-09-04 20:12:00.959338

2 个答案:

答案 0 :(得分:1)

您可以使用.loc来过滤所需的行并汇总相关列。

因为您没有向我们显示您的列名,所以我假设它们是col_1col_2

因此,我们可以执行以下操作:

print(df.loc[df['col_2'].dt.normalize() == '2019-09-11'])


col_1 col_2
3     2019-09-11 06:59:02.715641

然后,要访问相关列以获取总和,我们可以使用.sum()

将'col_1'传递到末尾
df.loc[df['col_2'].dt.normalize() == '2019-09-11']['col_1'].sum()
out : 3

dt.normalize()仅返回datetime列的日期值,这是因为01-01-2001不是==01-01-2001 23:59

导致代码无法工作的原因

如果我们打印以下内容:

print(df['col_2'].dt.normalize())
0    2019-09-11
1    2019-09-12
2    2019-09-02
3    2019-09-15
4    2019-09-01
5    2019-09-17
6    2019-09-06
7    2019-09-17
8    2019-09-01
9    2019-09-17
10   2019-09-04
11   2019-09-04
Name: 1, dtype: datetime64[ns]

请注意,dt.normalize()将数据类型保留为datetime,因此您可以使用进一步的datetime操作。

答案 1 :(得分:0)

当您指定sept['datetime'] == day1时,您正在比较包含时间的Timestamp。因此,您没有检查是否有9月11日的数据,而是在确切的午夜检查了9月11日的数据。

您可以像上面一样使用.between函数