Python数据分析笔记_第11天(pandas)

时间序列
  1. 创建时间序列
  • start和end以及freq配合能够生成start和end范围内以频率freq的一组时间索引
    pd.date_range(start=None, end=None, freq=‘10D’),指定起始与终止时间,按照频率取数
  • start和periods以及freq配合能够生成从start开始的频率为freq的periods个时间索引
    pd.date_range(start=None, periods=None, freq=‘M’),指定起始与个数,按照频率取指定个
  • 频率常用缩写在这里插入图片描述
  1. 将字符串类型的时间戳转换成时间类型
    df[“timeStamp”] = pd.to_datetime(df[“timeStamp”],format="")
    format参数大部分情况下可以不用写,但是对于pandas无法格式化的时间字符串,需要该参数,如包含中文时。
  2. 重采样
    重采样指的是将时间序列从一个频率转化为另一个频率进行处理的过程。将高频率数据转化为低频率数据为降采样;低频率转化为高频率为升采样。
    df.resample(‘M’)
pandas练习
  1. 统计出911数据中不同月份不同类型的电话的次数的变化情况
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

# 读取数据
pd.set_option('display.max_columns', None)
file_path = './911.csv'
phone = pd.read_csv(file_path)
print(phone.info())

# 字符串时间戳转换成日期
phone['timeStamp'] = pd.to_datetime(phone['timeStamp'])

# 增加一列类型列
piece = phone['title'].str.split(':')
type = [i[0] for i in piece]
phone['type'] = pd.DataFrame(np.array(type).reshape((phone.shape[0], 1)))

# 将一列新数据添加至已有DataFrame后,必须确保行索引一致。当索引不同时无法匹配时,数据会用nan填充
phone.set_index('timeStamp', inplace=True)

# 作图
plt.figure(figsize=(15, 5), dpi=80)
# DataFrameGroupBy中每一个元素是一个元组,(索引(分组的值),分组之后的DataFrame)
for group, data in phone.groupby(by='type'):
    count_m = data.resample('M').count()['title']  # 时间降采样
    x = count_m.index
    y = count_m.values
    x_label = [i.strftime('%Y%m%d') for i in x]  # 时间显示格式化
    plt.plot(range(len(x)), y, label=group)  # 循环作图,注意添加图例

plt.xticks(range(len(x))[::2], x_label[::2], rotation=45)
plt.legend(loc='best')
plt.show()
  1. 请绘制出北京的PM2.5随时间的变化情况
import pandas as pd
from matplotlib import pyplot as plt

file_path = './PM2.5/BeijingPM20100101_20151231.csv'
data_bj = pd.read_csv(file_path)
print(data_bj.info())
# print(data_bj.head())

# 将分开的时间字符串,通过pd.PeriodIndex的方法转化为pandas的时间类型
period = pd.PeriodIndex(year=data_bj['year'], month=data_bj['month'], day=data_bj['day'], hour=data_bj['hour'], freq='H')  # <class 'pandas.core.indexes.period.PeriodIndex'>
data_bj['datetime'] = period

# 将datetime设置为索引,方便后续重采样
data_bj.set_index('datetime', inplace=True)

# 处理缺失数据,删除缺失值
bj_plot = data_bj['PM_US Post']  # 可先整列取出数据后处理nan,已将日期数据设为索引,单独取出列仍有日期数据
bj_plot_c = data_bj['PM_Dongsihuan']
# bj_plot = bj_plot.dropna()
# bj_plot_c = bj_plot_c.dropna()  # 数据降采样,后按周取均值,nan不影响与统计,可省略删除缺失值的步骤

# 按小时统计数据过多,进行降采样,按周统计均值
bj_plot = bj_plot.resample('7D').mean()
bj_plot_c = bj_plot_c.resample('7D').mean()

# 作图,中国监测站和美国监测站两组数据
plt.figure(figsize=(30, 10), dpi=80)
x = bj_plot.index
x_c = bj_plot_c.index
y = bj_plot.values
y_c = bj_plot_c.values
plt.plot(range(len(x)), y, label='us_post')
plt.plot(range(len(x_c)), y_c, label='cn_post')
plt.xticks(range(0, len(x), 10), x[::10], rotation=45)
plt.legend(loc='best')
plt.show()

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值