Chapter 6 pandas中的时间序列

Chapter 6 pandas中的时间序列,第1张

时间序列的创建

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()
小结

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/923328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存