赞
踩
关于时间序列的处理方法:
① 生成一段时间范围
pd.date_range(start=None,end=None,periods=None,freq='D')
start表示起始时间,end为结束时间,freq为时间变化的频率,设置为“D”则为一天,“10D”则为10天,periods表示个数,即要生成多少个当前的时间范围。
periods会自动顺延,设置了periods就不需要再设置end参数了。相当于按freq的时间频率从start点向后再取periods个时间。
关于常见freq的取值:
别名 | 偏移量类型 | 说明 |
D | Day | 按日 |
B | BusinessDay | 按每工作日 |
H | Hour | 按每小时 |
T或min | Minute | 每分 |
S | Second | 每秒 |
L或ms | Milli | 每毫秒 |
U | Micro | 每微秒 |
M | MonthEnd | 每月最后一个日历日 |
BM | BusinessMonthEnd | 每月最后一个工作日 |
MS | MonthBegin | 每月第一个日历日 |
BMS | BusinessMonthBegin | 每月第一个工作日 |
② 使用时间序列
转换为时间序列:to_datetime()方法
pd.to_datetime(df[""],format="") 可以把时间的字符串全部转换成时间序列类型
可以转换的类型:20170103 2017-01-03 2017/01/03都是可以的
如果时间字符串无法识别,那么就要添加format字符串手动进行添加
pandas重采样方法:
重采样指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,反之为升采样。
resample要求转换对象必须有类似datetime的索引
实例1:从紧急电话数据中统计不同类型的紧急情况的次数,并统计出不同月份不同类型紧急电话的次数的变化情况。
- import pandas as pd
- file_path = "F:\\拜师培训\\基础操作\\21-数据分析资料\\数据分析资料\\day06\\code\\911.csv"
- df = pd.read_csv(file_path)
-
- ##现在的要求是从紧急电话数据中统计不同类型的紧急情况的次数,并统计出不同月份不同类型紧急电话的次数的变化情况
- ##首先统计不同类型的紧急情况次数
- ##有两种方法,第一种是创建空白列表进行赋值,第二种是向df中添加新的一列,用groupby方法进行聚合
- ##首先进行第一种方法
-
- import numpy as np
- ##先找到紧急情况的种类,一共有几种 包含在title中,用“:”隔开的部分
- data_list = df["title"].str.split(": ").to_list() ##获得的数据like[[],[]],内涵元素为列表
- type_list = list(set([i[0] for i in data_list]))
-
- ##再创建空白列表,列表的形状与原数据相同
- blank_list = pd.DataFrame(np.zeros((df.shape[0],len(type_list))),columns=type_list)
-
- ##进行列表遍历,对空白列表进行赋值
- ##两种遍历的方法,一种是对全数据遍历,要循环万次以上
- ##一种是对type遍历,然后对数据进行整体赋值,更快
-
- for type in type_list:
- blank_list.loc[df["title"].str.contains(type),type]=1
-
- #统计次数
- print(blank_list.sum())
-
- ##第二种方法
- ##把要分类的依据作为df的新列扩展
- ##获取每条数据的分类
- add_column = [i[0] for i in data_list]
- df["type"] = pd.DataFrame(np.array(add_column))
- print(df.groupby(by="type").count()['lat'])
-
-
- ##要统计出不同月份不同类型紧急电话的次数的变化情况
- ##按照月份进行resample
- df["timeStamp"]=pd.to_datetime(df["timeStamp"])
- df.set_index(["timeStamp"],inplace=True)
- print(df.resample("M").count()["lat"])
实例2:现在有北上广、深圳和沈阳五个城市的空气质量数据,绘制5歌城市的PM2.5随时间的变化情况。
关于时间序列并不是字符串的情况如何处理。
- import pandas as pd
- import matplotlib.pyplot as plt
- pd.set_option('display.max_columns',None)
- file_path = "F:\\拜师培训\\基础操作\\21-数据分析资料\\数据分析资料\\day06\\code\\PM2.5\\BeijingPM20100101_20151231.csv"
- df = pd.read_csv(file_path)
-
- # print(df.info())
- # print(df.head(10))
- date = pd.PeriodIndex(year=df["year"],month=df["month"],day=df["day"],hour=df["hour"],freq="H")
- df["date"] = date
- df.set_index(["date"],inplace=True)
- #print(df)
- data_US = df["PM_US Post"].fillna(0)
- data_US = data_US.resample("3M").mean()
- data_CN = df["PM_Dongsihuan"].fillna(0)
- data_CN = data_CN.resample("3M").mean()
- _x = data_US.index
- _x_CN = data_CN.index
- _y = data_US.values
- print(_y)
- _y_CN = data_CN.values
- print(_y_CN)
- # print(_x)
-
- ##后面画图出现了一点问题,选择的数据x轴差别比较大,难以画在一张图上
PeriodIndex函数:
class pandas.PeriodIndex(data=None, ordinal=None, freq=None, dtype=None, copy=False, name=None, **fields)
data:array-like(1d int np.ndarray 或 PeriodArray),可选
用于构建索引的可选period-like 数据。
copy:bool
制作输入 ndarray 的副本。
freq:str 或句点对象,可选
pandas 期间字符串或相应对象之一。
year:int、array 或 Series,默认无
month:int、array 或 Series,默认无
quarter:int、array 或 Series,默认无
day:int、array 或 Series,默认无
hour:int、array 或 Series,默认无
minute:int、array 或 Series,默认无
second:int、array 或 Series,默认无
dtype:str 或 PeriodDtype,默认无
可以按照设定的年月日时分等创建时间序列,解决时间序列的数据不是整字符串的问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。