从 pandas 数据框中过滤掉一天

Emm*_*Emm 5 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()
Run Code Online (Sandbox Code Playgroud)

这是我的数据示例

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
Run Code Online (Sandbox Code Playgroud)

Dat*_*ice 2

您可以使用 a.loc来过滤所需的行并对相关列求和。

由于您没有向我们展示您的专栏名称,我假设它们是col_1并且col_2

因此,要访问该行,我们可以执行以下操作:

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


col_1 col_2
3     2019-09-11 06:59:02.715641
Run Code Online (Sandbox Code Playgroud)

然后,要访问相关列以获得总和,我们可以将 'col_1' 传递到末尾.sum()

df.loc[df['col_2'].dt.normalize() == '2019-09-11']['col_1'].sum()
out : 3
Run Code Online (Sandbox Code Playgroud)

dt.normalize()仅返回日期时间列的日期值,您的代码不起作用的原因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]
Run Code Online (Sandbox Code Playgroud)

请注意,dt.normalize()保持数据类型不变,datetime以便您能够使用进一步的datetime操作。