时间戳是处理数据经常要遇到的问题,比如nc数据中的time维度 或者pandas等结构中的时序数据,详细介绍过段时间更新一下,先上的常用方便的小代码。
主要是利用 datetime, timedelta / np.datetime64/ pandas.date_range
1. 生成一段时间,并挑选出你想要的时间(比如我只想要夏季的数据)
注意:pd.date_range(start=None, end=None, periods=None, freq=‘D’, tz=None, normalize=False, name=None, closed=None, **kwargs)
start:开始时间 end:结束时间 periods:偏移量 freq:频率,默认天,pd.date_range()默认频率为日历日,pd.bdate_range()默认频率为工作日 tz:时区 name:索引对象名称
import pandas as pd
start_date = '1960-06-01'
end_date = '2021-08-31'
date_range = pd.date_range(start=start_date, end=end_date)
# 过滤出夏季日期(6月1日到8月31日之间的日期) 5704
summer_dates = date_range[(date_range.month >= 6) & (date_range.month <= 8)]
2. 给定日期T,计算前一天的日期T-1 (以'1960-06-02'为例)
from datetime import datetime, timedelta
date_obj = datetime.strptime('1960-06-02', '%Y-%m-%d')
previous_day = date_obj - timedelta(days=1)
# # 将前一天的日期格式化为字符串
previous_day_str = previous_day.strftime('%Y-%m-%d')
3. 有的时候时间戳是以np.array格式,Time: array(['1960-06-01T12:00:00.000000000', '1960-06-02T12:00:00.000000000', '1960-06-03T12:00:00.000000000', '1960-06-04T12:00:00.000000000', '1960-06-05T12:00:00.000000000', '1960-06-06T12:00:00.000000000', '1960-06-07T12:00:00.000000000', '1960-06-08T12:00:00.000000000', '1960-06-09T12:00:00.000000000', '1960-06-10T12:00:00.000000000'], dtype='datetime64[ns]'),找出其中找出'1960-6-1T12:00:00.000000000'的索引
import numpy as np
# 日期数组
Time = np.array(['1960-06-01T12:00:00.000000000', '1960-06-02T12:00:00.000000000',
'1960-06-03T12:00:00.000000000', '1960-06-04T12:00:00.000000000',
'1960-06-05T12:00:00.000000000', '1960-06-06T12:00:00.000000000',
'1960-06-07T12:00:00.000000000', '1960-06-08T12:00:00.000000000',
'1960-06-09T12:00:00.000000000', '1960-06-10T12:00:00.000000000'],
dtype='datetime64[ns]')
# 目标日期
target_date = np.datetime64('1960-06-01T12:00:00.000000000')
# 查找索引
index = np.where(Time == target_date)[0]
if index:
print(f"目标日期的索引是:{index[0]}")
else:
print("未找到目标日期的索引")