📌  相关文章
📜  将 pandas 日期时间转换为日、工作日、月 - Python (1)

📅  最后修改于: 2023-12-03 14:53:44.663000             🧑  作者: Mango

将 pandas 日期时间转换为日、工作日、月 - Python

在数据分析和处理中,经常需要对日期时间进行转换和处理。pandas 提供了丰富的日期时间处理函数和方法,使得对时间序列的分析和处理变得更加简单和高效。在本文中,将介绍如何将 pandas 的日期时间数据转换为日、工作日、月等不同的时间间隔。

将日期时间转换为日

将日期时间转换为日非常简单,只需要使用 pandas 中的 DatetimeIndex.day 属性即可。

import pandas as pd

# 创建示例数据
dates = pd.date_range(start='2022-01-01', end='2022-01-10')
df = pd.DataFrame({'date': dates})

# 转换为日
df['day'] = df['date'].dt.day

# 输出结果
print(df)

运行结果如下:

| | date | day | |---:|:-----------|----:| | 0 | 2022-01-01 | 1 | | 1 | 2022-01-02 | 2 | | 2 | 2022-01-03 | 3 | | 3 | 2022-01-04 | 4 | | 4 | 2022-01-05 | 5 | | 5 | 2022-01-06 | 6 | | 6 | 2022-01-07 | 7 | | 7 | 2022-01-08 | 8 | | 8 | 2022-01-09 | 9 | | 9 | 2022-01-10 | 10 |

从结果可以看出,我们成功将日期转换为了日。

将日期时间转换为工作日

在实际工作中,经常需要将日期时间转换为工作日,即去除周末和节假日。pandas 中提供了两种方式来实现这一功能。

方式一:使用 pandas 的 B 表示工作日

将日期时间转换为工作日,可以使用 pandas 中的 DatetimeIndex.weekday 属性判断日期是周几,然后使用布尔运算将周末和节假日去除。例如,将星期一到星期五分别用 1 表示,星期六和星期日用 0 表示,则所有的工作日即为 1。

import pandas as pd

# 创建示例数据
dates = pd.date_range(start='2022-01-01', end='2022-01-10')
df = pd.DataFrame({'date': dates})

# 将工作日标记为 1
df['workday'] = (df['date'].dt.weekday < 5).astype(int)

# 输出结果
print(df)

运行结果如下:

| | date | workday | |---:|:-----------|----------:| | 0 | 2022-01-01 | 0 | | 1 | 2022-01-02 | 0 | | 2 | 2022-01-03 | 1 | | 3 | 2022-01-04 | 1 | | 4 | 2022-01-05 | 1 | | 5 | 2022-01-06 | 1 | | 6 | 2022-01-07 | 1 | | 7 | 2022-01-08 | 0 | | 8 | 2022-01-09 | 0 | | 9 | 2022-01-10 | 1 |

从结果可以看出,我们成功将日期转换为了工作日。

方式二:使用 pandas 中的 bdate_range 函数

bdate_range 函数可以生成指定起止日期范围内的所有工作日日期序列。例如,生成 2022 年 1 月第 1 个工作日至第 10 个工作日的序列,可以如下实现:

import pandas as pd

# 生成 2022 年 1 月第 1 个工作日至第 10 个工作日的序列
dates = pd.bdate_range(start='2022-01-01', end='2022-01-10')

# 将日期序列转换为 DataFrame
df = pd.DataFrame({'date': dates})

# 输出结果
print(df)

运行结果如下:

| | date | |---:|:-----------| | 0 | 2022-01-03 | | 1 | 2022-01-04 | | 2 | 2022-01-05 | | 3 | 2022-01-06 | | 4 | 2022-01-07 | | 5 | 2022-01-10 |

从结果可以看出,我们成功生成了指定日期范围内的所有工作日日期序列。

将日期时间转换为月

将日期时间转换为月,可以使用 pandas 中的 DatetimeIndex.month 属性。

import pandas as pd

# 创建示例数据
dates = pd.date_range(start='2022-01-01', end='2022-12-31', freq='D')
df = pd.DataFrame({'date': dates})

# 转换为月
df['month'] = df['date'].dt.month

# 输出结果
print(df)

运行结果如下:

| | date | month | |------:|:-----------|--------:| | 0 | 2022-01-01 | 1 | | 1 | 2022-01-02 | 1 | | 2 | 2022-01-03 | 1 | | 3 | 2022-01-04 | 1 | | 4 | 2022-01-05 | 1 | | ... | ... | ... | | 360 | 2022-12-27 | 12 | | 361 | 2022-12-28 | 12 | | 362 | 2022-12-29 | 12 | | 363 | 2022-12-30 | 12 | | 364 | 2022-12-31 | 12 |

从结果可以看出,我们成功将日期转换为了月。

总结

本文介绍了如何将 pandas 的日期时间数据转换为日、工作日、月等不同的时间间隔。具体来说,我们讲解了将日期时间转换为日和月的方法,以及将日期时间转换为工作日的两种方式。这些操作在实际工作中都有广泛的应用,读者可以根据自己的需求进行参考和应用。