Matlab转Python新手求助:如何生成指定区间间隔的规则时间序列?
生成规则时间序列:从Matlab到Python的转换方案
嘿,作为刚从Matlab转Python的新手,你遇到的这个时间序列生成问题其实很好解决!Python里的pandas库专门为时间序列处理做了优化,写法比Matlab更直观易懂,咱们直接看对应你需求的实现:
用pandas快速生成(推荐)
pandas的date_range()函数就是干这个的,完美对应你Matlab里的datenum增量写法:
import pandas as pd # 生成2013年1月1日至1月31日、每10分钟一个间隔的时间序列 time_series = pd.date_range(start='2013-01-01', end='2013-01-31', freq='10T')
参数解释:
start/end:直接用字符串指定起始和结束日期,格式很灵活(比如'2013-01-01'、'2013/1/1'都可以),也可以传入datetime对象freq:指定时间间隔,这里的'10T'代表10分钟(T是minute的缩写),常见的还有:'H':小时'D':天'W':周'M':月末日期- 更复杂的比如
'2H30T'就是2小时30分钟间隔
生成的结果是一个DatetimeIndex对象,你可以直接用于数据分析,或者转成列表、numpy数组来使用。
用标准库datetime实现(无额外依赖)
如果不想引入pandas,用Python自带的datetime和timedelta也能实现,就是需要写个循环:
from datetime import datetime, timedelta start_date = datetime(2013, 1, 1) end_date = datetime(2013, 1, 31) interval = timedelta(minutes=10) time_series = [] current_date = start_date while current_date <= end_date: time_series.append(current_date) current_date += interval
这种写法更接近你Matlab里手动增量的思路,但处理大规模数据或者后续的时间序列操作时,pandas会方便很多。
对比你给出的Matlab代码:
t = datenum(2013,1,1):datenum(0,0,0,0,10,0):datenum(2013,12,31);
Python的写法不需要手动计算时间间隔的数值,直接用语义化的参数就能实现,可读性更强。
内容的提问来源于stack exchange,提问作者matt_python_newbie
相关产品推荐
相关产品推荐

