使用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 Dataframe中,将一系列的日期字符串转换为时间序列

    将一系列的日期字符串转换为时间序列的步骤如下: 读取数据:首先需要从数据来源中读取数据。使用pandas库中的read_csv()函数读取csv文件,read_excel()函数读取excel文件,read_sql()函数读取数据库中的数据等。 例如,我们从csv文件中读取日期字符串数据。 import pandas as pd df = pd.read_c…

    python-answer 2023年3月27日
    00
  • 按给定的比例随机分割一个Pandas数据框架

    按给定的比例随机分割一个Pandas数据框架的完整攻略如下: 首先,导入所需的库 import pandas as pd from sklearn.model_selection import train_test_split 加载数据集,这里以鸢尾花数据集为例 df = pd.read_csv(‘https://archive.ics.uci.edu/ml…

    python-answer 2023年3月27日
    00
  • python使用xlsx和pandas处理Excel表格的操作步骤

    下面就来详细讲解一下“Python使用xlsx和pandas处理Excel表格的操作步骤”的完整攻略。 1. 安装所需的库 首先需要安装所需的库,包括 xlsxwriter 和 pandas,你可以使用以下命令在命令行中安装: pip install pandas xlsxwriter 2. 读取Excel文件 读取Excel文件可以使用 pandas 库中…

    python 2023年5月14日
    00
  • Python 使用Iris数据集的Pandas基础知识

    首先,让我们简单介绍一下Iris数据集。Iris数据集是一个经典的多变量数据集,用于分类和聚类算法的测试和演示,由Fisher在1936年创造,并称为Iris花卉数据集。它包含150个观察值,分别代表三个不同品种的鸢尾花,每个品种包含50个样本。每个样本都包含了萼片长度、萼片宽度、花瓣长度和花瓣宽度四个特征。 接下来,我们将详细介绍如何使用Pandas库来操…

    python-answer 2023年3月27日
    00
  • Python教程pandas数据分析去重复值

    以下是Python教程pandas数据分析去重复值的完整攻略。 pandas数据分析去重复值 Pandas数据框架简介 Pandas是一个Python库,提供数据分析功能。Pandas中最主要的数据结构是“DataFrame”,它是由多个列组成的二维表格。 在Pandas中,可以通过多种方式来创建DataFrame对象,比如从文件、从字典、从列表等等。一旦创…

    python 2023年5月14日
    00
  • 在Pandas Python中从数据框架中选择任何行

    在 Pandas Python 中,可以通过行索引或布尔条件从数据框中选择行。下面我将介绍在 Pandas Python 中从数据框架中选择任何行的完整攻略,并提供一个简单的示例。 1. 选择单个行或多个行的子集 要选择单个行或多个行的子集,可以使用 loc 和 iloc 方法。 loc 方法使用标签索引, iloc 方法使用整数索引。如果要选择所有行,可以…

    python-answer 2023年3月27日
    00
  • python DataFrame中stack()方法、unstack()方法和pivot()方法浅析

    当我们在处理大量数据时,经常需要对数据进行重塑操作以达到更好的可视化效果。在Python中,pandas库提供了非常丰富的数据重塑操作方法,其中包括stack()、unstack()和pivot()方法。 stack()方法 在pandas的DataFrame中,stack()方法是基于列的透视操作,它将列中的数据压缩成一列,并利用层次化索引(MultiIn…

    python 2023年5月14日
    00
  • Pandas Python中数据帧的上限和下限–舍入和截断

    什么是数据帧的上限和下限? 在Pandas Python中,数据帧的上限和下限是指对数据框中的数值数据执行舍入或截断操作,从而将其舍入或截断为指定的精度、小数位数或指定的范围。 在 Pandas 中,有三种方法可以执行数据帧的上下限操作: round()函数:将数值舍入到指定的小数位数。 ceil()函数:将数值向上舍入到最接近的整数。 floor()函数:…

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