按日期对数据帧进行切片在Python中没有返回任何结果



我有数据帧df:

id         timestamp           data group_id   date
56729   56970   2020-02-01 01:22:52.717 21.0    1   2020-02-01
57135   57376   2020-02-01 14:11:22.633 38.0    3   2020-02-01
57136   57377   2020-02-01 14:11:22.733 39.0    3   2020-02-01
57137   57378   2020-02-01 14:11:23.637 39.0    3   2020-02-01
57138   57379   2020-02-01 14:11:23.737 40.0    3   2020-02-01

和代码:

df = df[df['data'] >0]
df['timestamp'] = pd.to_datetime(df['timestamp'])
start_date = pd.to_datetime('2020-02-01 00:00:00')
end_date = pd.to_datetime('2020-03-01 00:00:00')
df = df.loc[(df['timestamp'] > start_date) & (df['timestamp'] < end_date)]
df['date'] = df['timestamp'].dt.date
df = df.sort_values(by=['date'])
df = df[df['date'] == '2020-02-01']

date是在datetime的基础上创建的,这样我以后就可以用datedf进行分组。但当我在某个日期(比如2020-02-01(对df进行切片时,代码什么都没有返回,因为那里有当天的数据。输出看起来是这样的:

id  timestamp   data    group_id    date

这只是列名称。怎么了?

您的df[date]列包含类似datetime的值,而不是string,因此这些值将不等于'2020-02-01',您可以执行以下操作之一:

>>> df[df['date'] == pd.to_datetime('2020-02-01')]

或者,

>>> df[df['date'].astype(str) == '2020-02-01']

您的df['date']日期对象类型数据,同时将其与第df = df[df['date'] == '2020-02-01']行的字符串进行比较。看看下面的解决方案:

import pandas as pd
dic = {'timestamp': ['2020-02-01 01:22:52.717', '2020-02-01 01:24:52.717', '2020-02-02 01:22:52.717',
'2020-02-03 01:22:52.717']}
df = pd.DataFrame(dic)
df['timestamp'] = pd.to_datetime(df['timestamp'])
print(df['timestamp'])

start_date = pd.to_datetime('2020-02-01 00:00:00')
end_date = pd.to_datetime('2020-03-01 00:00:00')
df = df.loc[(df['timestamp'] > start_date) & (df['timestamp'] < end_date)]
df['date'] = df['timestamp'].dt.date
print(df['date'])
df = df.sort_values(by=['date'])
df = df[df['date'] == pd.to_datetime('2020-02-01')]
print(df)

输出:

0   2020-02-01 01:22:52.717
1   2020-02-01 01:24:52.717
2   2020-02-02 01:22:52.717
3   2020-02-03 01:22:52.717
Name: timestamp, dtype: datetime64[ns]
0    2020-02-01
1    2020-02-01
2    2020-02-02
3    2020-02-03
Name: date, dtype: object
timestamp        date
0 2020-02-01 01:22:52.717  2020-02-01
1 2020-02-01 01:24:52.717  2020-02-01

最新更新