在dataframe中使用时间序列
# 设置时间序列为dataframe的index
index=pd.date_range("20170101",periods=10)
df=pd.DataFrame(np.random.rand(10),index=index)
# 生成一个以时间序列为索引的dataframe
# 为什么时间序列可以作为索引呢?
# 因为时间序列在pandas中是一个DatetimeIndex这样一种类型 即是时间索引类型
# 把时间序列设置为dataframe的索引有什么好处呢?
index
=====================================================================
=====================================================================
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
'2017-01-09', '2017-01-10'],
dtype='datetime64[ns]', freq='D')
# to_datetime 能够把一个series类型的时间字符串转换为时间序列
什么时候能够转化?什么时候不能转化呢?
可以转化
如果我们的时间字符串pandas无法识别?应该怎么办呢?
添加format参数,手动的告诉pandas,当前的这种时间字符串应该如何格式化
https://blog.csdn.net/shomy_liu/article/details/44141483
很多时候,我们是不需要做这样一种操作的,只要我们的时间字符串稍微规范一些,它都是可以识别出来的,但是如果有时候,比如说我们的时间字符串带有中文,它就识别不出来了
pandas重采样
重采样:指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样
往往我们做的是降采样
比如说:原来是2020-12-20 12:30:30
精确到秒
现在是2020-12-30
精确到天
pandas提供了一个resample的方法来帮助我们实现频率转化
如果我们设置dataframe的索引为时间类型的话,那么这个dataframe就可以直接调用resample这个方法来帮助我们完成重采样的过程
t = pd.DataFrame(np.random.uniform(10,50,(100,1)),index=pd.date_range("20170101",periods=100))
动手
-
统计出911数据中不同月份电话次数的变化情况
-
统计出911数据中不同月份不同类型的电话的次数的变化情况
解一
统计出911数据中不同月份电话次数的变化情况
方法一:创建全为0的数组
# -*- coding: utf-8 -*-
'''
@Time : 2020/12/24 10:43
@Author : yuhui
@Email : 3476237164@qq.com
@FileName: pandas_13.py
@Software: PyCharm
'''
"""
38【时间序列】01pandas时间序列02
统计出911数据中不同月份电话次数的变化情况
方法一
"""
import pandas as pd
pd.options.display.max_columns=999
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"]=["KaiTi"] # 解决中文乱码的问题 设置字体为楷体
plt.rcParams["font.family"]="sans-serif" # 解决符号无法显示的问题
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
"""设置图形大小和图片品质"""
fig=plt.figure(
figsize=(16,9),
dpi=100,
)
df=pd.read_csv("../data/911.csv")
# 取出所有的月份信息
timeStamp_list=df["timeStamp"].str.split("-").tolist()
month_list=list(set([i[0]+"-"+i[1] for i in timeStamp_list]))
# 创建数组
month_array=pd.DataFrame(np.zeros((df.shape[0],len(month_list))),columns=month_list)
# 赋值
for i in month_list:
month_array.loc[df["timeStamp"].str.contains(i),i]=1
# 统计不同月份数量
month_sum=month_array.sum(axis=0)
# 排序
month_sum.sort_index(axis=0,inplace=True)
# 准备数据 绘制折线图
_x=month_sum.index
_y=month_sum.values
plt.plot(range(len(_x)),_y)
# 绘制x轴刻度信息
plt.xticks(range(0,len(_x),10),_x[::10]</