pandas处理时间序列

用python处理CSV文件里的数据,数据按时间索引,但是数据不是每隔固定都有,比如有的是15分钟,有的是40分钟有。数据大概如下图所示。需要每隔15分钟把数据加到一起,比如把2017-03-11 1:00-1:15的数据加到1:15。还请大神指导。。

补充一条:实际数据有30多万条,可否使用pandas读取来避免手动输入。比如:
clipboard.png

阅读 4.2k
1 个回答

将DateTimeKey列格式化
2017-03-11 00:00到2017-03-11 00:15时间范围统一格式化2017-03-11 00:15
2017-03-11 00:15到2017-03-11 00:30时间范围统一格式化2017-03-11 00:30
2017-03-11 00:30到2017-03-11 00:45时间范围统一格式化2017-03-11 00:45
2017-03-11 00:45到2017-03-11 01:00时间范围统一格式化2017-03-11 01:00
依次类推,然后对DateTimeKey进行groupby sum

import pandas as pd
from datetime import datetime, timedelta

data = [
    {'DateTimeKey': '2017-03-11 01:05', 'number1': None, 'number2': 99},
    {'DateTimeKey': '2017-03-11 00:50', 'number1': 243, 'number2': 0},
    {'DateTimeKey': '2017-03-11 00:55', 'number1': 26, 'number2': 0},
    {'DateTimeKey': '2017-03-11 01:35', 'number1': 0, 'number2': 0},
    {'DateTimeKey': '2017-03-11 01:35', 'number1': 91, 'number2': 0},
    {'DateTimeKey': '2017-03-11 02:25', 'number1': 0, 'number2': 0},
    {'DateTimeKey': '2017-03-11 02:40', 'number1': 0, 'number2': 0},
    {'DateTimeKey': '2017-03-11 02:40', 'number1': 267, 'number2': 0},
    {'DateTimeKey': '2017-03-11 04:50', 'number1': None, 'number2': 133}
]

def time_format(x):
    dt = datetime.strptime(x, '%Y-%m-%d %H:%M')
    minute = (dt.minute // 15) * 15
    return datetime(dt.year, dt.month, dt.day, dt.hour, minute) + timedelta(minutes=15)


df = pd.DataFrame(data).fillna(0)
df['DateTimeKey'] = df['DateTimeKey'].apply(time_format)
print df.groupby('DateTimeKey', as_index=False).sum()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题