38【时间序列】01pandas时间序列02

本文介绍了如何在DataFrame中使用时间序列,包括如何处理Pandas无法识别的时间字符串,重采样的概念及降采样的应用场景。通过resample方法实现频率转化,并提供了911数据中不同月份电话次数变化的统计分析案例,探讨了不同方法的实现,如创建全为0的数组、新增列以及利用Pandas时间序列功能。
摘要由CSDN通过智能技术生成

在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]</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值