start——创建时间序列的起始时间
end——创建时间序列的结束时间
freq——创建时间间隔依据 D天 M月 ,若每隔三天可以使用3D。
periods——创建时间序列个数
In [1]: import pandas as pd
In [2]: pd.date_range(start='20171230',end='20180131',freq='D')
Out[2]:
DatetimeIndex(['2017-12-30', '2017-12-31', '2018-01-01', '2018-01-02',
'2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06',
'2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10',
'2018-01-11', '2018-01-12', '2018-01-13', '2018-01-14',
'2018-01-15', '2018-01-16', '2018-01-17', '2018-01-18',
'2018-01-19', '2018-01-20', '2018-01-21', '2018-01-22',
'2018-01-23', '2018-01-24', '2018-01-25', '2018-01-26',
'2018-01-27', '2018-01-28', '2018-01-29', '2018-01-30',
'2018-01-31'],
dtype='datetime64[ns]', freq='D')
In [3]: pd.date_range(start='20171230',end='20180131',freq='10D')
Out[3]: DatetimeIndex(['2017-12-30', '2018-01-09', '2018-01-19', '2018-01-29'], dtype='datetime64[ns]', freq='10D')
In [4]: pd.date_range(start='20171230',periods=10,freq='D')
Out[4]:
DatetimeIndex(['2017-12-30', '2017-12-31', '2018-01-01', '2018-01-02',
'2018-01-03', '2018-01-04', '2018-01-05', '2018-01-06',
'2018-01-07', '2018-01-08'],
dtype='datetime64[ns]', freq='D')
In [5]: pd.date_range(start='20171230',periods=10,freq='M')
Out[5]:
DatetimeIndex(['2017-12-31', '2018-01-31', '2018-02-28', '2018-03-31',
'2018-04-30', '2018-05-31', '2018-06-30', '2018-07-31',
'2018-08-31', '2018-09-30'],
dtype='datetime64[ns]', freq='M')
In [6]: pd.date_range(start='20171230',periods=10,freq='H')
Out[6]:
DatetimeIndex(['2017-12-30 00:00:00', '2017-12-30 01:00:00',
'2017-12-30 02:00:00', '2017-12-30 03:00:00',
'2017-12-30 04:00:00', '2017-12-30 05:00:00',
'2017-12-30 06:00:00', '2017-12-30 07:00:00',
'2017-12-30 08:00:00', '2017-12-30 09:00:00'],
dtype='datetime64[ns]', freq='H')
关于频率的更多缩写
将时间字符转换为时间序列
使用to_datetime来进行转换
df[‘timeStamp’]=pd.to_datetime(df[‘timeStamp’],format=’ %Y-%m-%d’)
eg:pd.to_datetime(‘1997/10/11’,format=‘%Y-%m-%d’)
输出结果:Timestamp(‘1997-10-11 00:00:00’)
举例一:911中不同月份电话次数情况:
#coding=utf-8
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df=pd.read_csv('./911.csv')
#pandas中的时间序列
df['timeStamp']=pd.to_datetime(df['timeStamp'])
df.set_index('timeStamp',inplace=True) #将'timeStamp'指定为索引
#print(df.head(5))
#911中不同月份电话次数情况
count_by_month=df.resample('M').count()['title'] #按照月份重新采样,然后计算次数
#print(count_by_month)
#绘图
_x=count_by_month.index
_y=count_by_month.values
_x=[i.strftime('%Y-%m-%d') for i in _x] #将时间格式化
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x,rotation=45)
plt.show()
案例二:统计911中不同月份不同类型的电话次数的变化情况
#coding=utf-8
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
df=pd.read_csv('./911.csv')
#把时间字符转换为时间序列
df['timeStamp']=pd.to_datetime(df['timeStamp'])
#添加列,表示分类
temp_list=df['title'].str.split(': ').tolist()
cate_list=[i[0] for i in temp_list]
df['cate']=pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1))) #索引必须一致
df.set_index('timeStamp',inplace=True) #timeStamp将设置为索引
plt.figure(figsize=(20, 8), dpi=80)
#统计911中不同月份不同类型的电话次数的变化情况
#分组
for group_name,group_data in df.groupby(by='cate'):
#对不同的分类进行绘图
count_by_month = group_data.resample('M').count()['title']
#画图
_x = count_by_month.index
_y = count_by_month.values
_x = [i.strftime('%Y-%m-%d') for i in _x] # 格式化
plt.plot(range(len(_x)), _y, label=group_name)
plt.xticks(range(len(_x)), _x, rotation=45) #x轴信息设置一次就够了
plt.legend(loc='best')
plt.show()
时间格式化
datetime.strftime(‘格式’) 将时间datetime格式化成想要的时间
常见的格式化符号:
(1)%y 两位数的年份表示(00-99)
(2)%Y 四位数的年份表示(000-9999)
(3)%m 月份(01-12)
(4)%d 天(0-31)
(5)%H 24小时制小时数(0-23)
(6)%I 12小时制小时数(01-12)
(7)%M 分钟数(00-59)
(8)%S 秒(00-59)
使用PeriodIndex处理
#coding=utf-8
import matplotlib.pyplot as plt
import pandas as pd
file_path='./PM2.5/BeijingPM20100101_20151231.csv'
df=pd.read_csv(file_path)
# print(df.head())
# print(df.info())
#绘制五个城市PM2.5随时间的变化情况
#DatetimeIndex可以理解为时间戳,而PeriodIndex可以理解为时间段
#将分开的时间字符串通过PeriodIndex转换为Pandas的时间类型
period=pd.PeriodIndex(year=df['year'],month=df['month'],hour=df['hour'],freq='h')
# print(period)
# print(type(period))
df['datetime']=period
print(df.head(5))
#将datetime设置为索引
df.set_index('datetime',inplace=True)
#对df进行降采样
df=df.resample('7D').mean()
#处理缺失值数据,删除缺失值数据
#print(df['PM_US Post'])
data=df['PM_US Post'].dropna()
data_china=df['PM_Dongsi'].dropna()
#画图
_x=data.index
_x=[i.strftime('%Y-%m-%d') for i in _x]
_y=data.values
_x_china=data_china.index
_x_china=[i.strftime('%Y-%m-%d') for i in _x_china]
_y_china=data_china.values
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y,label='US_Post')
plt.plot(range(len(_x_china)),_y_china,label='PM_Dongsi')
plt.xticks(range(0,len(_x),10),list(_x)[::10],rotation=45)
plt.legend(loc='best')
plt.show()
小结
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)