使用Python Pandas处理日期和时间

下面是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日

相关文章

  • pandas参数设置的实用小技巧

    这里是关于“pandas参数设置的实用小技巧”的完整攻略。 1. pandas参数设置介绍 pandas具有数百个参数设置,这些参数能够影响pandas的操作效率和数据处理能力,我们可以通过修改这些参数来提高pandas的性能和准确性。 pandas参数主要分为两种:全局参数和对象参数。全局参数适用于pandas的全局环境,而对象参数只影响特定pandas对…

    python 2023年5月14日
    00
  • pandas实现按行选择的示例代码

    以下是pandas实现按行选择的详细攻略: 1. 数据准备 在学习pandas之前,需要准备一些数据。这里我们以一个名为students.csv的csv文件为例,其中包含学生的姓名、年龄和成绩三列数据。可以使用以下代码读取csv文件并将其转化为pandas的DataFrame类型: import pandas as pd df = pd.read_csv(‘…

    python 2023年5月14日
    00
  • 在Pandas中突出显示每一列的最小值

    在Pandas中,我们可以使用style属性来给DataFrame定制样式。下面介绍一种使用highlight_min()方法突出显示每一列最小值的方法。 首先我们需要导入pandas库: import pandas as pd 声明一个DataFrame: df = pd.DataFrame({ ‘A’: [2, 4, 3, 1, 5], ‘B’: [3,…

    python-answer 2023年3月27日
    00
  • Pandas高级教程之Pandas中的GroupBy操作

    Pandas高级教程之Pandas中的GroupBy操作 GroupBy的概念 在Pandas中,GroupBy的基本概念是将数据划分为不同的组,然后对每一组应用相同的操作。这个过程可以分解为以下几个步骤: 分割:根据一些规则,将数据分成不同的组。 应用:将同一组的数据应用一个函数,以产生一个新的值。 组合:将所有的新值合并成一个新的数据结构。 GroupB…

    python 2023年5月14日
    00
  • 如何在Pandas数据框架中实现数据标准化

    数据标准化也被称为归一化,是将不同规格的数据转换为同一规格的过程。这个过程主要是针对那些特征数据范围比较大,或者数据值相差较大的情况,通过一些数学方法将其转化为0到1之间的值,用于建模分析。在Pandas数据框架中,我们可以使用sklearn库中的StandardScaler来进行数据标准化。下面将详细介绍如何实现。 准备数据 首先我们需要准备一份数据,这里…

    python-answer 2023年3月27日
    00
  • Python中的应急表

    Python中的应急表实际上是指异常处理机制中的异常类型和对应的处理方式的一张表格。在Python中,当程序执行过程中出现错误时,会抛出异常,并且根据异常类型的不同,我们需要采取不同的处理方式来解决问题。而对于Python开发者而言,了解这些异常类型及其含义是非常重要的。 下面是Python中常见的几种异常类型及其含义: 异常类型 含义 AssertionE…

    python-answer 2023年3月27日
    00
  • 在Python中使用Pandas显示指定年份的所有星期日

    在Python中使用Pandas显示指定年份的所有星期日,主要可以通过以下几个步骤实现: 导入Pandas库 在Python中使用Pandas进行数据处理和分析,首先需要导入Pandas库。 import pandas as pd 创建日期范围 使用Pandas的date_range函数创建一个包含指定年份所有日期的范围。 date_rng = pd.dat…

    python-answer 2023年3月27日
    00
  • python xlsxwriter模块的使用

    我为您介绍一下python xlsxwriter模块的使用攻略。 什么是xlsxwriter模块? xlsxwriter是Python的一个模块,可以用来将数据写入Excel文件中。实际上,它可以用来创建任意大小的工作表,并提供许多excel风格的格式化选项。 安装xlsxwriter模块 我们可以使用pip命令在Python环境中安装xlsxwriter模…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部