Python Pandas数据中对时间的操作

  • Post category:Python

Python Pandas 数据中对时间的操作

1. Pandas中的时间类型

Pandas中有3种时间类型:Timestamp、DatetimeIndex、Period 。其中 Timestamp 可以看做它是Python 内置 datetime 模块的替代类。DatetimeIndex 是由时间戳 pandas.Timestamp 对象构成的索引,而 Period 表示的是一段时间(字符串, 如 ‘2017Q1’ 代表2017年第一季度)。

2. 时间的索引

在Pandas中可以将时间作为行或列索引,从而更方便地对时间序列进行处理。

2.1 基于时间的索引

使用 Pandas 的 DataFrame 或 Series 对象创建时间序列的时候,可以使用 Pandas 中的 datetime 或其他日期解析库直接对字符串进行解析,也可以将所有的日期存储为Python的 datetime 对象后再转化成时间序列。

下面是一个将时间作为行索引的示例代码:

import pandas as pd

df = pd.DataFrame({'weight': [62, 68, 80, 93],
                   'age': [22, 34, 56, 68]},
                   index=pd.date_range(start='20210101', end='20210104', freq='D'))
print(df)

输出结果:

            weight  age
2021-01-01      62   22
2021-01-02      68   34
2021-01-03      80   56
2021-01-04      93   68

2.2 时间的切片和筛选

在本例中,我们使用了 pd.date_range 创建从 2021-01-01 到 2021-01-04 的时间序列,并将其作为 DataFrame 的行索引。可以使用 loc 方法基于时间来进行数据的切片和筛选:

print(df.loc['2021-01-02':'2021-01-03'])

输出结果:

            weight  age
2021-01-02      68   34
2021-01-03      80   56

3. 时间的变换

可以使用 Pandas 的时间函数对时间进行各种处理,例如计算时间差、更改时间单位或格式。

3.1 计算时间差

可以使用 Pandas 的时间差函数计算两个时间之间的差,例如:

import pandas as pd

start_time = pd.Timestamp('20210101')
end_time = pd.Timestamp('20210301')
time_diff = end_time - start_time

print("Time difference: {}".format(time_diff))

输出结果:

Time difference: 59 days 00:00:00

3.2 更改时间单位或格式

可以使用 strftime 函数来更改时间格式,例如:

import pandas as pd

df = pd.DataFrame({'datetime': pd.date_range(start='20210101', end='20210104', freq='D'),
                   'value': [62, 68, 80, 93]})

df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.strftime('%b')
df['weekday'] = df['datetime'].dt.weekday

print(df)

输出结果:

    datetime  value  year month  weekday
0 2021-01-01     62  2021   Jan        4
1 2021-01-02     68  2021   Jan        5
2 2021-01-03     80  2021   Jan        6
3 2021-01-04     93  2021   Jan        0

在以上示例中,我们使用了 Pandas 中的 dt 属性(DatetimeProperties)来访问日期时间信息并往 DataFrame 中添加新列,其中 month 属性将给出日期的月份的缩写形式, weekday属性将表示该日期是周几。