1、pd.date_range(start=None, end=None, periods=None, freq=‘D’):start、end为日期格式的字符串。start、end、freq一起使用,生成start与end范围内freq的时间索引。start、periods、freq一起使用生成start开始periods个freq的时间索引。freq常见的有D日、M月、H小时、B每工作日、T/min分钟、S秒、BM每月最后一个工作日、MS每月第一个日历日、BMS每月第一个工作日
2、df[“timeStamp”] = pd.to_datetime(df[“timeStamp”],format=“”):将字符串转时间序列
3、df.resample(‘M’).mean():df的行索引为时间序列,重抽样为将一个频率的时间转化为另一个转化为另一个频率的时间,一般将高频率转化为低频率
4、t.strftime(‘%Y%m%d’):将时间类型转化为指定格式的字符串类型
5、df[‘cate’]=pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1))):将dataframe的数据重新赋值需保证行索引一致。
现在我们有2015到2017年25万条911的紧急电话的数据,请统计出出这些数据中不同类型的紧急情况的次数,如果我们还想统计出不同月份不同类型紧急电话的次数的变化情况,应该怎么做呢?
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
path='911.csv'
df=pd.read_csv(path)
df.info()
pd.set_option('display.max_columns',None)
print(df.head(1))
data1=df['title'].str.split(':').tolist()###分割列
data1=[i[0] for i in data1]###提取字段
df['cate']=pd.DataFrame(np.array(data1).reshape(df.shape[0],1))##生成新的字段
print(df.groupby(by='cate').count()['title'])##统计数
统计出911数据中不同月份电话次数的变化情况
统计出911数据中不同月份不同类型的电话的次数的变化情况
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
path='911.csv'
df=pd.read_csv(path)
df.info()
pd.set_option('display.max_columns',None)
print(df.head(1))
df['timeStamp']=pd.to_datetime(df['timeStamp'])###将时间字符串转为时间类型
df.set_index('timeStamp',inplace=True)###重建索引
df_cnt=df.resample('M').count()['title']###重采样为月频率
print(df_cnt)
_x=df_cnt.index.strftime('%Y%m')###将时间格式显示为年月
_y=df_cnt.values
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x,rotation=45)
plt.show()
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
path='911.csv'
df=pd.read_csv(path)
df.info()
pd.set_option('display.max_columns',None)
print(df.head(1))
data1=df['title'].str.split(':').tolist()###分割列
data1=[i[0] for i in data1]###提取字段
df['cate']=pd.DataFrame(np.array(data1).reshape(df.shape[0],1))##生成新的字段,dataframe的行索引需一致
df['timeStamp']=pd.to_datetime(df['timeStamp'])###将时间字符串转为时间类型
df.set_index('timeStamp',inplace=True)###重建索引
df_gb=df.groupby(by='cate')
plt.figure(figsize=(20,8),dpi=80)
for group_name,group_data in df_gb:
df_cnt=group_data.resample('M').count()['title']###重采样为月频率
_x=df_cnt.index.strftime('%Y%m')###将时间格式显示为年月
_y=df_cnt.values
plt.plot(range(len(_x)),_y,label=group_name)
plt.xticks(range(len(_x)),_x,rotation=45)
plt.legend()
plt.show()
现在我们有北上广、深圳、和沈阳5个城市空气质量数据,请绘制出5个城市的PM2.5随时间的变化情况
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
path='PM2.5\BeijingPM20100101_20151231.csv'
df=pd.read_csv(path)
df.info()
pd.set_option('display.max_columns',None)
print(df.head(1))
###将多列分开的时间转成时间类型
period=pd.PeriodIndex(year=df['year'],month=df['month'],day=df['day'],hour=df['hour'],freq="H")
df['datetime']=period
##设置时间列为索引
df.set_index('datetime',inplace=True)####inplace=True作用在原始数据上,否则返回一个新的dataframe
##重采样为7天的频率
data_bj=df.resample('7D').mean()
###画图
_x=data_bj.index.strftime('%Y%m%d')
_y=data_bj['PM_US Post'].values
_y_c = data_bj["PM_Nongzhanguan"].values
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y,label='US_POST')
plt.plot(range(len(_x)),_y_c,label='CN_POST')
plt.xticks(range(0,len(_x),30),_x[::30])
plt.legend(loc="best")
plt.show()