pandas 分离日期和时间

在处理时间序列数据时,经常会遇到需要将日期和时间分开处理的情况。而使用Python中的pandas库可以很方便地处理这一问题。本文将介绍如何使用pandas库分离日期和时间,并对其进行特定的操作。
创建示例数据
首先,我们创建一个示例的时间序列数据,以便后续演示。我们使用pandas的date_range函数生成一个包含日期和时间的时间序列:
import pandas as pd
# 创建一个包含日期和时间的时间序列
date_rng = pd.date_range(start='2022-01-01 00:00:00', end='2022-01-05 23:59:59', freq='H')
df = pd.DataFrame(date_rng, columns=['date'])
# 显示前5行数据
print(df.head())
运行以上代码,我们可以得到如下输出:
date
0 2022-01-01 00:00:00
1 2022-01-01 01:00:00
2 2022-01-01 02:00:00
3 2022-01-01 03:00:00
4 2022-01-01 04:00:00
可以看到,我们已经创建了一个包含日期和时间的时间序列数据。
分离日期和时间
接下来,我们将使用pandas库中的dt访问器来分离日期和时间。使用dt.date可以获取日期部分,使用dt.time可以获取时间部分。我们将把这两部分分别存储在新的列中:
# 分离日期和时间并存储到新的列中
df['date'] = pd.to_datetime(df['date'])
df['date_only'] = df['date'].dt.date
df['time_only'] = df['date'].dt.time
# 显示前5行数据
print(df.head())
运行以上代码,我们可以看到如下输出:
date date_only time_only
0 2022-01-01 00:00:00 2022-01-01 00:00:00
1 2022-01-01 01:00:00 2022-01-01 01:00:00
2 2022-01-01 02:00:00 2022-01-01 02:00:00
3 2022-01-01 03:00:00 2022-01-01 03:00:00
4 2022-01-01 04:00:00 2022-01-01 04:00:00
我们可以看到,我们已经成功将日期和时间分离,并存储到了新的列中。
操作日期和时间
除了分离日期和时间之外,我们还可以对日期和时间进行一些操作。例如,我们可以提取年、月、日、小时、分钟、秒等信息,或者对日期进行加减操作。
提取年、月、日、时、分、秒
我们可以使用dt.year、dt.month、dt.day、dt.hour、dt.minute、dt.second来提取相应的信息:
# 提取年、月、日、时、分、秒信息
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['hour'] = df['date'].dt.hour
df['minute'] = df['date'].dt.minute
df['second'] = df['date'].dt.second
# 显示前5行数据
print(df.head())
运行以上代码,我们可以看到如下输出:
date date_only time_only year month day hour minute second
0 2022-01-01 00:00:00 2022-01-01 00:00:00 2022 1 1 0 0 0
1 2022-01-01 01:00:00 2022-01-01 01:00:00 2022 1 1 1 0 0
2 2022-01-01 02:00:00 2022-01-01 02:00:00 2022 1 1 2 0 0
3 2022-01-01 03:00:00 2022-01-01 03:00:00 2022 1 1 3 0 0
4 2022-01-01 04:00:00 2022-01-01 04:00:00 2022 1 1 4 0 0
我们可以看到,我们已经成功提取了年、月、日、时、分、秒等信息。
日期加减操作
我们也可以对日期进行加减操作,例如,我们可以将日期向前或向后移动若干天,以及计算日期之间的差值:
# 日期加减操作
df['next_day'] = df['date'] + pd.DateOffset(days=1)
df['prev_day'] = df['date'] - pd.DateOffset(days=1)
df['date_diff'] = df['next_day'] - df['date']
# 显示前5行数据
print(df.head())
运行以上代码,我们可以看到如下输出:
date date_only time_only year month day hour minute second next_day prev_day date_diff
0 2022-01-01 00:00:00 2022-01-01 00:00:00 2022 1 1 0 0 0 2022-01-02 00:00:00 NaT 1 days 00:00:00
1 2022-01-01 01:00:00 2022-01-01 01:00:00 2022 1 1 1 0 0 2022-01-02 01:00:00 2021-12-31 01:00:00 1 days 00:00:00
2 2022-01-01 02:00:00 2022-01-01 02:00:00 2022 1 1 2 0 0 2022-01-02 02:00:00 2021-12-31 02:00:00 1 days 00:00:00
3 2022-01-01 03:00:00 2022-01-01 03:00:00 2022 1 1 3 0 0 2022-01-02 03:00:00 2021-12-31 03:00:00 1 days 00:00:00
4 2022-01-01 04:00:00 2022-01-01 04:00:00 2022 1 1 4 0 0 2022-01-02 04:00:00 2021-12-31 04:00:00 1 days 00:00:00
总结
本文介绍了如何使用pandas库分离日期和时间,并对其进行特定的操作。通过使用pandas中的dt访问器,我们可以很方便地提取日期和时间的不同部分,也可以对日期进行加减操作。这些操作对于处理时间序列数据非常有用,能够更加灵活地进行数据分析和处理。
极客教程