详解如何使用Pandas处理时间序列数据

 更新时间:2024年01月12日 08:54:22   作者:Alex_StarSky  
时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景,本文给大家详细介绍了如何使用Pandas处理时间序列数据,文中通过代码示例讲解的非常详细,需要的朋友可以参考下

Pandas-如何轻松处理时间序列数据

时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。此处选择巴黎、伦敦欧洲城市空气质量监测NO2数据作为样例。

监测的时间序列数据

比如,air quality no2 数据表中,主要是巴黎,伦敦等城市的每小时环境监测数据:

In [2]: air_quality.head()
Out[2]: 
    city country                   datetime location parameter  value   unit
0  Paris      FR  2019-06-21 00:00:00+00:00  FR04014       no2   20.0  µg/m³
1  Paris      FR  2019-06-20 23:00:00+00:00  FR04014       no2   21.8  µg/m³
2  Paris      FR  2019-06-20 22:00:00+00:00  FR04014       no2   26.5  µg/m³
3  Paris      FR  2019-06-20 21:00:00+00:00  FR04014       no2   24.9  µg/m³
4  Paris      FR  2019-06-20 20:00:00+00:00  FR04014       no2   21.4  µg/m³

In [3]: air_quality.city.unique()
Out[3]: array(['Paris', 'Antwerpen', 'London'], dtype=object)

转换为日期时间对象

默认读取的日期数据,实际上是字符串string 类型,无法进行日期时间的操作,可以转换为datetime数据对象类型,可以用to_datetime() 函数这样操作:

In [5]: air_quality["datetime"] = pd.to_datetime(air_quality["datetime"])

In [6]: air_quality["datetime"]
Out[6]: 
0      2019-06-21 00:00:00+00:00
1      2019-06-20 23:00:00+00:00
2      2019-06-20 22:00:00+00:00
3      2019-06-20 21:00:00+00:00
4      2019-06-20 20:00:00+00:00
                  ...           
2063   2019-05-07 06:00:00+00:00
2064   2019-05-07 04:00:00+00:00
2065   2019-05-07 03:00:00+00:00
2066   2019-05-07 02:00:00+00:00
2067   2019-05-07 01:00:00+00:00
Name: datetime, Length: 2068, dtype: datetime64[ns, UTC]

当然,也可以在pandas.read_csv(), 和 pandas.read_json()函数中,直接就解析转换为datetime类型,parse_dates 参数

pd.read_csv("../data/air_quality_no2_long.csv", parse_dates=["datetime"])

时间操作的典型问题

如何找到序列中的时间开始和时间结束?

In [7]: air_quality["datetime"].min(), air_quality["datetime"].max()
Out[7]: 
(Timestamp('2019-05-07 01:00:00+0000', tz='UTC'),
 Timestamp('2019-06-21 00:00:00+0000', tz='UTC'))

通过min()函数,找到时间最小值,也就是开始时间;max()函数,找到时间序列最大值,也就是结束时间。

如何比较两个时间点?如何计算时间跨度,或者持续时间?

In [8]: air_quality["datetime"].max() - air_quality["datetime"].min()
Out[8]: Timedelta('44 days 23:00:00')

pandas.Timestamp 可以直接计算差值,结果为pandas.Timedelta 类型,类似于python库的时间跨度,datetime.timedelta

如何仅关注某个时间单位?

比如年,月,日,比如增加一列,表示月份?

In [11]: air_quality["month"] = air_quality["datetime"].dt.month

In [12]: air_quality.head()
Out[12]: 
    city country                  datetime  ... value   unit  month
0  Paris      FR 2019-06-21 00:00:00+00:00  ...  20.0  µg/m³      6
1  Paris      FR 2019-06-20 23:00:00+00:00  ...  21.8  µg/m³      6
2  Paris      FR 2019-06-20 22:00:00+00:00  ...  26.5  µg/m³      6
3  Paris      FR 2019-06-20 21:00:00+00:00  ...  24.9  µg/m³      6
4  Paris      FR 2019-06-20 20:00:00+00:00  ...  21.4  µg/m³      6

[5 rows x 8 columns]

使用timestamp的 dt.month属性,提取月份数值。类似的,也可以提取年,日,季节等等时间属性。

如何计算每周,每个城市的No2浓度平均值?

In [13]: air_quality.groupby(
   ....:     [air_quality["datetime"].dt.weekday, "location"])["value"].mean()
   ....: 
Out[13]: 
datetime  location          
0         BETR801               27.875000
          FR04014               24.856250
          London Westminster    23.969697
1         BETR801               22.214286
          FR04014               30.999359
                                  ...    
5         FR04014               25.266154
          London Westminster    24.977612
6         BETR801               21.896552
          FR04014               23.274306
          London Westminster    24.859155
Name: value, Length: 21, dtype: float64

使用groupby函数,按照周为时间单位,按城市分组然后合并归集,计算组内均值。

如何把时间Datetime作为索引?

In [18]: no_2 = air_quality.pivot(index="datetime", columns="location", values="value")

In [19]: no_2.head()
Out[19]: 
location                   BETR801  FR04014  London Westminster
datetime                                                       
2019-05-07 01:00:00+00:00     50.5     25.0                23.0
2019-05-07 02:00:00+00:00     45.0     27.7                19.0
2019-05-07 03:00:00+00:00      NaN     50.4                19.0
2019-05-07 04:00:00+00:00      NaN     61.9                16.0
2019-05-07 05:00:00+00:00      NaN     72.4                 NaN

pivot()函数,指定索引 index,列属性columns和数值values,生成二维表。

另外,也可以通过set_index函数。

如何更新频度的重采样?

比如,把当前每小时的采样频度,更新为每个月,取最大值作为采样值。

In [22]: monthly_max = no_2.resample("M").max()

In [23]: monthly_max
Out[23]: 
location                   BETR801  FR04014  London Westminster
datetime                                                       
2019-05-31 00:00:00+00:00     74.5     97.0                97.0
2019-06-30 00:00:00+00:00     52.5     84.7                52.0

resample()函数,类似于groupby分组聚合函数。

以上代码只是一个简单示例,示例代码中的表达式可以根据实际问题进行修改。

到此这篇关于详解如何使用Pandas处理时间序列数据的文章就介绍到这了,更多相关Pandas处理时间序列数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyHacker实现网站后台扫描器编写指南

    PyHacker实现网站后台扫描器编写指南

    这篇文章主要为大家介绍了PyHacker实现网站后台扫描器编写指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 简单介绍Python中的几种数据类型

    简单介绍Python中的几种数据类型

    Python基本内置数据类型有很多种,比如:整型(数字)、字符串、元组、列表、字典和布尔类型,下面就来给大家详细介绍下
    2016-01-01
  • python爬虫爬取某网站视频的示例代码

    python爬虫爬取某网站视频的示例代码

    这篇文章主要介绍了python爬虫爬取某网站视频的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Pytorch如何指定device(cuda or cpu)

    Pytorch如何指定device(cuda or cpu)

    这篇文章主要介绍了Pytorch如何指定device(cuda or cpu)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Python基础之高级变量类型实例详解

    Python基础之高级变量类型实例详解

    这篇文章主要介绍了Python基础之高级变量类型,结合实例形式详细分析了Python元组、字典、字符串、公共方法以及遍历、切片等常见操作技巧,需要的朋友可以参考下
    2020-01-01
  • Python获取PDF文档的各种页面信息

    Python获取PDF文档的各种页面信息

    了解PDF页面信息对于有效处理、编辑和管理PDF文件至关重要,PDF文件通常包含多个页面,每个页面可能有不同的尺寸、方向、旋转角度以及其他属性,这篇文章将介绍如何使用Python获取PDF文档的各种页面信息,需要的朋友可以参考下
    2025-02-02
  • python跨文件使用全局变量的实现

    python跨文件使用全局变量的实现

    这篇文章主要介绍了python跨文件使用全局变量的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • linux环境打包python工程为可执行程序的过程

    linux环境打包python工程为可执行程序的过程

    本次需求,在ubuntu上面开发的python代码程序需要打包成一个可执行程序然后交付给甲方,因为不能直接给源码给甲方,所以寻找方法将python开发的源码打包成一个可执行程序,本次在ubuntu上打包python源码的方法和在window上打包的有点类似,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • python 3.8.3 安装配置图文教程

    python 3.8.3 安装配置图文教程

    这篇文章主要为大家详细介绍了python 3.8.3 安装配置图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • python在多玩图片上下载妹子图的实现代码

    python在多玩图片上下载妹子图的实现代码

    学python的第二天,想写个东西出来玩玩,于是就写了这个,供那些才学一天的参考参考也行
    2013-08-08

最新评论