python - 具有确定时间间隔的熊猫 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
解决方案
用于Grouper
填充值:
df = datafiltr.groupby(pd.Grouper(freq='H', key='time'))['time'].count()
如果需要还00:00
和12: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
推荐阅读
- task - 是否可以暂停任务?
- scala - 方法中无法识别特征类型参数
- javascript - 当我单击 node.js 和 ejs 中的按钮时如何接受用户
- r - Kohonen 包:绘制单变量
- html - 我如何解决我在 CSS 中的嵌套 div 悬停问题
- javascript - 未捕获(承诺):CKEditorError:ckeditor-duplicated-modules(Angular)
- java - 如何在 Android Studio 中启动 Android 模拟器?
- blazor - 是否可以使用 Bootstrap 模式窗口在 Blazor 页面中使用由 HTML 组成的字符串变量?
- upload - 使用上传范围生成访问令牌的问题
- c# - EF Core,如何更新与同一实体具有一对多和多对多关系的表中的记录