首页 > 解决方案 > 具有确定时间间隔的熊猫 to_datetime

问题描述

我目前正在编写一个从 csv 读取时间戳的代码。但问题是我需要以 12 小时的时间间隔存储数据。这是我的代码:

data = pd.read_csv("2021-08-13.csv", parse_dates=['time'], infer_datetime_format=True)
    datafilter = data[data.lane == "Lane 1"]
    datafilter['time'] = pd.to_datetime(datafiltr['time'], errors='coerce')
    df = datafilter['time'].groupby(datafilter.time.dt.to_period("H")).agg('count')

打印给我:

2021-08-18 01:00    20
2021-08-18 02:00     8
2021-08-18 03:00     8
2021-08-18 04:00    13
2021-08-18 05:00    15
2021-08-18 06:00    17
2021-08-18 07:00    23
2021-08-18 08:00    27
2021-08-18 09:00    27
2021-08-18 10:00    28
2021-08-18 11:00    17
2021-08-18 12:00    12

而且无论我多么努力,我都找不到以我想要的方式存储它的方法。因此,例如,当 6:00 到 7:00 之间的 csv 文件中没有记录时,带有该时间戳的行将消失。我怎样才能让它像这样打印?:

2021-08-18 00:00    32
2021-08-18 01:00     0 <---
2021-08-18 02:00     8

标签: pythonpandasdatetime

解决方案


用于Grouper填充值:

df = datafiltr.groupby(pd.Grouper(freq='H', key='time'))['time'].count()

如果需要还00:0012:00使用前后的行reindex

             time   a
0 2021-08-18 01:00:00  20
1 2021-08-18 03:00:00   8
2 2021-08-18 04:00:00  13
3 2021-08-18 05:00:00  15


first = datafiltr['time'].min().normalize()
last = datafiltr['time'].max().normalize() + pd.Timedelta(12, 'H')

r = pd.date_range(first, last, freq='H')

df = datafiltr.groupby(pd.Grouper(freq='H', key='time'))['time'].count().reindex(r, fill_value=0)
print (df)
2021-08-18 00:00:00    0
2021-08-18 01:00:00    1
2021-08-18 02:00:00    0
2021-08-18 03:00:00    1
2021-08-18 04:00:00    1
2021-08-18 05:00:00    1
2021-08-18 06:00:00    0
2021-08-18 07:00:00    0
2021-08-18 08:00:00    0
2021-08-18 09:00:00    0
2021-08-18 10:00:00    0
2021-08-18 11:00:00    0
2021-08-18 12:00:00    0
Freq: H, Name: time, dtype: int64

推荐阅读