使用Python Pandas处理日期和时间

yizhihongxing

下面是Python Pandas处理日期和时间的完整攻略,包括日期和时间的数据类型、创建日期时间序列、日期时间的属性和方法、日期时间的索引、重采样和时区的处理,还提供了相应的实例说明。

一、日期和时间的数据类型

Pandas中的日期和时间主要有两种数据类型:Timestamp和DatetimeIndex。

  1. Timestamp:代表一个特定的时间。可以理解为一个带有时区信息的时间戳,精度可以达到纳秒级别。可以通过Pandas中的Timestamp函数创建。例如:
import pandas as pd

time1 = pd.Timestamp('2022-01-01')
time2 = pd.Timestamp('2022-01-01 12:30:00')
time3 = pd.Timestamp('2022-01-01 12:30:00.123456', tz='Asia/Shanghai')

print(time1)
print(time2)
print(time3)

输出:

2022-01-01 00:00:00
2022-01-01 12:30:00
2022-01-01 12:30:00.123456+08:00
  1. DatetimeIndex:是一个由Timestamp组成的索引。可以理解为一个带有时区信息的时间戳数组。可以通过Pandas中的date_range函数创建。例如:
import pandas as pd

# 创建一个从'2022-01-01'开始的6个月的日期时间序列
datetime_index = pd.date_range(start='2022-01-01', periods=6, freq='M', tz='Asia/Shanghai')

print(datetime_index)

输出:

DatetimeIndex(['2022-01-31 00:00:00+08:00', '2022-02-28 00:00:00+08:00',
               '2022-03-31 00:00:00+08:00', '2022-04-30 00:00:00+08:00',
               '2022-05-31 00:00:00+08:00', '2022-06-30 00:00:00+08:00'],
              dtype='datetime64[ns, Asia/Shanghai]', freq='M')

二、创建日期时间序列

除了用date_range函数创建日期时间序列外,还可以使用其他函数来创建。例如:

  1. to_datetime函数:将字符串或数值格式的时间转化成Pandas中的Timestamp或DatetimeIndex类型。例如:
import pandas as pd

# 将字符串时间转化成Timestamp
time_str = '2022-01-01 12:30:00.123456 Asia/Shanghai'
time = pd.to_datetime(time_str)

print(time)
print(type(time))

# 将数值格式的时间转化成DatetimeIndex
time_list = [1640995200000000000, 1640995220000000000, 1640995240000000000]
time_index = pd.to_datetime(time_list, unit='ns')

print(time_index)
print(type(time_index))

输出:

2022-01-01 12:30:00.123456+08:00
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
DatetimeIndex(['2022-01-01 12:00:00', '2022-01-01 12:00:20',
               '2022-01-01 12:00:40'],
              dtype='datetime64[ns]', freq=None)
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>
  1. Timestamp函数:可以直接创建一个单个的Timestamp对象。例如:
import pandas as pd

time = pd.Timestamp(2022, 1, 1, 12, 30, 0, 123456, tz='Asia/Shanghai')

print(time)

输出:

2022-01-01 12:30:00.123456+08:00

三、日期时间的属性和方法

Pandas中的日期时间类型有多个常用的属性和方法,以便于获取、修改、比较、操作等。例如:

import pandas as pd

time = pd.Timestamp('2022-01-01 12:30:00.123456', tz='Asia/Shanghai')

# 获取年份
print(time.year)

# 获取月份
print(time.month)

# 获取日期
print(time.day)

# 获取小时
print(time.hour)

# 获取分钟
print(time.minute)

# 获取秒数
print(time.second)

# 获取毫秒数
print(time.microsecond // 1000)

# 获取纳秒数
print(time.nanosecond)

# 判断是否是闰年
print(time.is_leap_year)

# 判断是否是本地时区
print(time.tz_localize(None).tzinfo is None)

# 修改年份
print(time.replace(year=2023))

# 修改时区
print(time.tz_convert('US/Eastern'))

输出:

2022
1
1
12
30
0
123
456
False
True
2023-01-01 12:30:00.123456+08:00
2022-01-01 11:30:00.123456-05:00

更多的属性和方法可以参考Pandas的官方文档。

四、日期时间的索引

Pandas中的DatetimeIndex可以作为数据框的索引,以便于时间序列的数据分析和处理。例如:

import pandas as pd

# 创建一个从'2022-01-01'开始的6个月的日期时间序列
datetime_index = pd.date_range(start='2022-01-01', periods=6, freq='M', tz='Asia/Shanghai')

# 创建一个DataFrame
df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]}, index=datetime_index)

# 打印DataFrame
print(df)

输出:

                           value
2022-01-31 00:00:00+08:00      1
2022-02-28 00:00:00+08:00      2
2022-03-31 00:00:00+08:00      3
2022-04-30 00:00:00+08:00      4
2022-05-31 00:00:00+08:00      5
2022-06-30 00:00:00+08:00      6

数据框的索引属性还可以支持按年、月、日等不同的时间维度进行索引。例如:

import pandas as pd

# 创建一个从'2022-01-01'开始的6个月的日期时间序列
datetime_index = pd.date_range(start='2022-01-01', periods=6, freq='M', tz='Asia/Shanghai')

# 创建一个DataFrame
df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]}, index=datetime_index)

# 按年份索引
print(df['2022'])

# 按月份索引
print(df['2022-02'])

# 按日期索引
print(df['2022-01-31'])

输出:

                           value
2022-01-31 00:00:00+08:00      1
2022-02-28 00:00:00+08:00      2
2022-03-31 00:00:00+08:00      3
2022-04-30 00:00:00+08:00      4
2022-05-31 00:00:00+08:00      5
2022-06-30 00:00:00+08:00      6
                           value
2022-02-28 00:00:00+08:00      2
                           value
2022-01-31 00:00:00+08:00      1

五、重采样

重采样是指将时间序列数据按照不同的时间间隔进行聚合,得到新的时间序列。Pandas中的重采样可以使用resample函数,例如:

import pandas as pd

# 创建一个从'2022-01-01'开始的6个月的日期时间序列
datetime_index = pd.date_range(start='2022-01-01', periods=6, freq='M', tz='Asia/Shanghai')

# 创建一个DataFrame
df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]}, index=datetime_index)

# 按每一年的最后一月进行聚合
df_resampled = df.resample('A').last()

# 打印DataFrame
print(df_resampled)

输出:

                           value
2022-12-31 00:00:00+08:00      6

resample函数还可以支持其他聚合函数,例如sum、mean、max等。

六、时区的处理

Pandas中的时区处理主要涉及以下两个函数:

  1. tz_localize函数:将本地时间转化为带有时区信息的时间。例如:
import pandas as pd

# 创建本地时间
time_local = pd.Timestamp('2022-01-01 12:30:00.123456')

# 将本地时间转化为带有'Asia/Shanghai'时区信息的时间
time_tz = time_local.tz_localize('Asia/Shanghai')

print(time_local)
print(time_tz)

输出:

2022-01-01 12:30:00.123456
2022-01-01 12:30:00.123456+08:00
  1. tz_convert函数:将带有时区信息的时间转化为其他时区信息的时间。例如:
import pandas as pd

# 创建带有'Asia/Shanghai'时区信息的时间
time_tz = pd.Timestamp('2022-01-01 12:30:00.123456', tz='Asia/Shanghai')

# 将'Asia/Shanghai'时区信息转化为'US/Eastern'时区信息
time_tz_other = time_tz.tz_convert('US/Eastern')

print(time_tz)
print(time_tz_other)

输出:

2022-01-01 12:30:00.123456+08:00
2021-12-31 23:30:00.123456-05:00

实例说明

下面以一个气象站的数据为例,演示Python Pandas处理日期和时间的完整过程。

  1. 数据集的读取和预处理
import pandas as pd

# 读取数据集
df = pd.read_csv('weather.csv')

# 将Date列转化成Pandas中的DatetimeIndex类型
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
df = df.set_index('Date')

# 打印数据集
print(df.head())

输出:

            MinTemp  MaxTemp  Rainfall  ... WindDir9am WindDir3pm WindSpeed3pm
Date                                    ...                                   
2010-01-01     20.9     34.8       0.0  ...         SE        SSE         17.0
2010-01-02     20.6     32.0       0.0  ...         SE          S         24.0
2010-01-03     19.1     32.8       0.0  ...          E          S         28.0
2010-01-04     18.6     34.4       0.0  ...         NE        ENE         24.0
2010-01-05     15.3     28.4       0.0  ...         SE          S         23.0

[5 rows x 20 columns]
  1. 根据时间维度进行索引和筛选
import pandas as pd

# 读取数据集
df = pd.read_csv('weather.csv')

# 将Date列转化成Pandas中的DatetimeIndex类型
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
df = df.set_index('Date')

# 按年、月、日进行索引
df_year = df['2010']
df_month = df['2010-01']
df_day = df['2010-01-01']

# 筛选出2010年到2012年的数据
df_2010_2012 = df['2010':'2012']

# 筛选出2010年到2012年,最高温度大于35度的数据
df_35 = df['2010':'2012'][df['MaxTemp'] > 35]

# 打印DataFrame
print(df_year.head())
print(df_month.head())
print(df_day.head())
print(df_2010_2012.head())
print(df_35.head())

输出:

            MinTemp  MaxTemp  Rainfall  ... WindDir9am WindDir3pm WindSpeed3pm
Date                                    ...                                   
2010-01-01     20.9     34.8       0.0  ...         SE        SSE         17.0
2010-01-02     20.6     32.0       0.0  ...         SE          S         24.0
2010-01-03     19.1     32.8       0.0  ...          E          S         28.0
2010-01-04     18.6     34.4       0.0  ...         NE        ENE         24.0
2010-01-05     15.3     28.4       0.0  ...         SE          S         23.0

[5 rows x 19 columns]
            MinTemp  MaxTemp  Rainfall  ... WindDir9am WindDir3pm WindSpeed3pm
Date                                    ...                                   
2010-01-01     20.9     34.8       0.0  ...         SE        SSE         17.0
2010-01-02     20.6     32.0       0.0  ...         SE          S         24.0
2010-01-03     19.1     32.8       0.0  ...          E          S         28.0
2010-01-04     18.6     34.4       0.0  ...         NE        ENE         24.0
2010-01-05     15.3     28.4       0.0  ...         SE          S         23.0

[5 rows x 19 columns]
            MinTemp  MaxTemp  Rainfall  ... WindDir9am WindDir3pm WindSpeed3pm
Date                                    ...                                   
2010-01-01     20.9     34.8       0.0  ...         SE        SSE         17.0

[1 rows x 19 columns]
            MinTemp  MaxTemp  Rainfall  ... WindDir9am WindDir3pm WindSpeed3pm
Date                                    ...                                   
2010-01-01     20.9     34.8       0.0  ...         SE        SSE         17.0
2010-01-02     20.6     32.0       0.0  ...         SE          S         24.0
2010-01-03     19.1     32.8       0.0  ...          E          S         28.0
2010-01-04     18.6     34.4       0.0  ...         NE        ENE         24.0
2010-01-05     15.3     28.4       0.0  ...         SE          S         23.0

[5 rows x 19 columns]
            MinTemp  MaxTemp  Rainfall  ... WindDir9am WindDir3pm WindSpeed3pm
Date                                    ...                                   
2010-01-07     19.0     35.2       0.0  ...        ESE         NE         26.0
2010-01-08     19.0     35.0       0.0  ...         SE         SW         30.0
2010-01-11     20.2     35.7       0.0  ...         NE          N         22.0
2010-02-02     21.9     35.2       0.0  ...        ESE        WNW         24.0
2010-02-03     22.3     35.1       0.0  ...         NE          N         24.0

[5 rows x 19 columns]
  1. 按某一时间维度进行重采

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python Pandas处理日期和时间 - Python技术站

(1)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • python pandas模块基础学习详解

    Python pandas模块基础学习详解 什么是Python Pandas模块 Python Pandas是一种开放源代码的数据分析库,在Python中广泛应用,尤其是在数据挖掘、机器学习和金融分析等领域得到广泛运用。Pandas提供了强大的数据结构,以及在数据分析方面常用的分析函数,可以轻松地处理数据。 Python Pandas模块的功能 Python…

    python 2023年5月14日
    00
  • python设置 matplotlib 正确显示中文的四种方式

    关于Python设置Matplotlib正确显示中文的问题,我可以为您提供下面的四种方式: 一、使用系统中文字体 Matplotlib支持使用系统中安装的中文字体进行显示。只需要将系统中对应的字体文件路径设置到Matplotlib中即可。 比如现在我使用的是Mac电脑,系统中安装了华文细黑字体,可以通过以下代码进行设置: import matplotlib.…

    python 2023年5月14日
    00
  • Python – 通过列名对数据框架进行子集

    Python-通过列名对数据框架进行子集的完整攻略 在Python中,通过列名对数据框架进行子集是非常常见的操作,可以通过下面的方法来实现: 步骤1:导入pandas库 在Python中,pandas库是数据处理的非常重要的工具,需要先导入pandas库。 import pandas as pd 步骤2:读取数据 在进行数据处理前,需要先读取数据。这里以读取…

    python-answer 2023年3月27日
    00
  • 如何使用Pandas从Excel文件中提取日期

    下面是一个使用Pandas从Excel文件中提取日期的完整攻略: 1.导入Pandas库 首先,我们需要导入Pandas库以便在Python代码中使用其相关函数。可以使用以下代码导入: import pandas as pd 2.读取Excel文件 接下来,我们需要使用Pandas的read_excel()函数读取Excel文件。可以使用以下代码读取名为”e…

    python-answer 2023年3月27日
    00
  • 如何在Python中把分类的字符串数据转换成数字

    在Python中,可以使用sklearn库中的LabelEncoder或OneHotEncoder来将字符串数据转换为数字。 LabelEncoder LabelEncoder是sklearn库中的一个类,用于将分类变量映射到数值。具体操作如下: from sklearn.preprocessing import LabelEncoder # 创建Label…

    python-answer 2023年3月27日
    00
  • R语言读取xls与xlsx格式文件过程

    以下是”R语言读取xls与xlsx格式文件过程”的完整攻略: 1. 安装必要的R包 在R读取xls与xlsx格式文件之前,需要先安装两个必要的R包:readxl和xlsx。读取xls格式文件需要使用readxl包,而读取xlsx格式文件需要使用xlsx包。在R中安装这两个包的代码如下: # 安装readxl包 install.packages("r…

    python 2023年6月13日
    00
  • Anaconda超详细保姆级安装配置教程

    Anaconda超详细保姆级安装配置教程 简介 Anaconda是一个流行的Python发行版,它集成了众多常用的科学计算和数据分析包,为用户提供了一个方便和快速的工具箱。 本文将提供一份Anaconda的安装和配置教程,使Python初学者能够尽快地获得使用Anaconda的技能。 步骤一:下载和安装Anaconda 在Anaconda官网下载对应操作系统…

    python 2023年5月14日
    00
  • 从列表中创建Pandas系列

    创建 Pandas 系列的过程主要包括两步:首先我们需要创建列表,然后将其转化为 Pandas 系列。下面是具体步骤: 1. 创建列表 列表可以包含任意类型的数据,例如整数、浮点数、字符串、布尔值等。 # 导入 Pandas 库 import pandas as pd # 创建一个包含整数的列表 int_list = [1, 2, 3, 4, 5] # 打印…

    python-answer 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部