数据处理中关于时间的相关操作
北京时间与世界时间相互转换
在科研中我们获取的数据往往是北京时间,有时候需要将北京时间转换为世界时间,简单理解,世界UTC时间比北京时间快8个小时,即北京时=世界时+8,python中datetime可以轻松对这两种时间进行转换。
首先,导入相关库
import pandas as pd
import numpy as np
from datetime import datetime, timedelta # 采用此函数
import time
接着,导入数据,我的数据前五列分别是年份、月份、日期、小时、分钟,频率为30分钟
首先利用pandas的PeriodIndex模块将前五列进行合并
df = pd.read_excel("C:/Users/62692/Desktop/时间.xlsx")
periods = pd.PeriodIndex(year=df.iloc[:,0].astype(np.int64),month=df.iloc[:,1].astype(np.int64),day=df.iloc[:,2].astype(np.int64),hour= df.iloc[:,3].astype(np.int64),minute=df.iloc[:,4].astype(np.int64),freq='30T')
periods
接着,将北京时间转为世界UTC时间
utc_time = periods - timedelta(hours=8) # 世界时=北京时-8
结果如下:
最后将世界时进行切割,分为5列,并进行合并
pd.concat([pd.Series(utc_time).dt.year, pd.Series(utc_time).dt.month,pd.Series(utc_time).dt.day,pd.Series(utc_time).dt.hour,pd.Series(utc_time).dt.minute], axis=1)
时间是数值型
方法一:
tmp['时间'] = pd.to_datetime(tmp['ymd'].values,format='%Y%m%d')
tmp.set_index(tmp['时间'],inplace=True)
方法二
# 将其转化为object,然后索引出年月日
data1['TIMESTAMP_START'].astype(np.int64)
Year = []
for i in range(0,len(data1['TIMESTAMP_START'])):
print(data1['TIMESTAMP_START'][i])
Year.append(str(data1['TIMESTAMP_START'][i])[0:4])
month = []
for i in range(0,len(data1['TIMESTAMP_START'])):
print(data1['TIMESTAMP_START'][i])
month.append(str(data1['TIMESTAMP_START'][i])[4:6])
day = []
for i in range(0,len(data1['TIMESTAMP_START'])):
print(data1['TIMESTAMP_START'][i])
day.append(str(data1['TIMESTAMP_START'][i])[6:8])
hour = []
for i in range(0,len(data1['TIMESTAMP_START'])):
print(data1['TIMESTAMP_START'][i])
hour.append(str(data1['TIMESTAMP_START'][i])[8:10])
min = []
for i in range(0,len(data1['TIMESTAMP_START'])):
print(data1['TIMESTAMP_START'][i])
min.append(str(data1['TIMESTAMP_START'][i])[10:12])
Year = pd.DataFrame(np.array(Year))
month = pd.DataFrame(np.array(month))
day = pd.DataFrame(np.array(day))
hour = pd.DataFrame(np.array(hour))
min = pd.DataFrame(np.array(min))
data1['小时'] = hour
data1['分钟'] = min
data1['小时'] = data1['小时'].astype(np.float32)
data1['分钟'] = data1['分钟'].astype(np.float32)
data1= data1.iloc[:,:].reset_index(drop=True)
Time = []
for i in range(0,len(data1['TIMESTAMP_START'])):
print(data1['TIMESTAMP_START'][i])
Time.append(str(data1['TIMESTAMP_START'][i])[:-2])
Time = pd.DataFrame(np.array(Time))
data1['start_time'] = Time
data1 = data10_16.iloc[:,:].reset_index(drop=True)
data1['start_time'] = pd.to_datetime(data1['start_time']) # 将时间格式调整为标准时间格式
data = data1
year = pd.Series(pd.to_datetime(data1['start_time'])).dt.year
month = pd.Series(pd.to_datetime(data1['start_time'])).dt.month
day = pd.Series(pd.to_datetime(data1['start_time'])).dt.day
hour = pd.Series(pd.to_datetime(data1['start_time'])).dt.hour
minute = pd.Series(pd.to_datetime(data1['start_time'])).dt.minute
data['year'] = year
data['month'] = month
data['day'] = day
data['hour'] = hour
data['minute'] = minute
pd.concat([pd.Series(pd.to_datetime(data['start_time'])).dt.year,pd.Series(pd.to_datetime(data['start_time'])).dt.month,pd.Series(pd.to_datetime(data['start_time'])).dt.day,pd.Series(pd.to_datetime(data['start_time'])).dt.hour,pd.Series(pd.to_datetime(data['start_time'])).dt.minute],axis=1)
data['时间'] = pd.PeriodIndex(year=year,month=month,day=day,hour=hour,minute=minute,freq='30T')
data = data.set_index(data['时间'])