Python数据分析从入门到进阶:玩转日期型数据(含代码)

引言

在我们进行一些时间序列问题时,往往要对日期型数据进行分析处理,本章介绍一下如何使用python处理日期型数据

💮1. 将字符串转换成日期

python 复制代码
# 导入相关库;
import pandas as pd 
import numpy as np
python 复制代码
# 创建字符串
date_strings = np.array(['03-04-2005 11:35 PM',
                         '23-05-2010 12:01 AM',
                         '04-09-2009 09:09 PM'])
python 复制代码
# 转换成datetime 类型的数据
[pd.to_datetime(date, format='%d-%m-%Y %I:%M %p') for date in date_strings]
sql 复制代码
[Timestamp('2005-04-03 23:35:00'),
 Timestamp('2010-05-23 00:01:00'),
 Timestamp('2009-09-04 21:09:00')]
python 复制代码
# 我们还可以增加errors参数来处理错误
# 转换成datetime类型的数据
[pd.to_datetime(date, format='%d-%m-%Y %I:%M %p', errors = 'coerce') for date in date_strings]
sql 复制代码
[Timestamp('2005-04-03 23:35:00'),
 Timestamp('2010-05-23 00:01:00'),
 Timestamp('2009-09-04 21:09:00')]

当传入errors = 'coerce' 参数时,即使转换错误也不会报错,但是会将错误的值返回为Nan(缺失值)

🏵️2. 处理时区

一般而言,pandas的对象默认是没有时区的,不过我们也可以在创建对象时通过tz参数指定时区

python 复制代码
import pandas as pd
python 复制代码
# 创建一个dataframe
pd.Timestamp('2017-05-01 06:00:00', tz = 'Europe/London')
ini 复制代码
Timestamp('2017-05-01 06:00:00+0100', tz='Europe/London')
python 复制代码
# 可以使用tz_locallize添加时区信息
data = pd.Timestamp('2017-05-01 06:00:00')
python 复制代码
# 设置时区
data_in_london = data.tz_localize('Europe/London')
python 复制代码
data_in_london
ini 复制代码
Timestamp('2017-05-01 06:00:00+0100', tz='Europe/London')
python 复制代码
# 我们还可以使用tz_convert来转换时区

data_in_london.tz_convert('Asia/Chongqing')
ini 复制代码
Timestamp('2017-05-01 13:00:00+0800', tz='Asia/Chongqing')
python 复制代码
# Series对象还可以对每一个元素应用tz_localiz和tz_convert
dates = pd.Series(pd.date_range('2002-02-02', periods=3, freq='M'))
python 复制代码
# 设置时区
dates.dt.tz_localize('Asia/Chongqing')
yaml 复制代码
0   2002-02-28 00:00:00+08:00
1   2002-03-31 00:00:00+08:00
2   2002-04-30 00:00:00+08:00
dtype: datetime64[ns, Asia/Chongqing]

🌹3. 选择日期和时间

python 复制代码
dataframe = pd.DataFrame()
python 复制代码
dataframe['date'] = pd.date_range('2001-01-01 01:00:00', periods=100000, freq='H')

删选两个日期之间的观察值, 用 & 来表示且的关系

python 复制代码
dataframe[(dataframe['date']>'2002-01-01 01:00:00') & (dataframe['date']<='2002-1-1 04:00:00')]

.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

| | date |
| 8761 | 2002-01-01 02:00:00 |
| 8762 | 2002-01-01 03:00:00 |

8763 2002-01-01 04:00:00

另一种方法,将date这一列设为索引,然后用loc删选

python 复制代码
dataframe = dataframe.set_index(dataframe['date'])
python 复制代码
dataframe.loc['2002-1-1 01:00:00':'2002-1-1 04:00:00']

.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

| | date |
| date | |
| 2002-01-01 01:00:00 | 2002-01-01 01:00:00 |
| 2002-01-01 02:00:00 | 2002-01-01 02:00:00 |
| 2002-01-01 03:00:00 | 2002-01-01 03:00:00 |

2002-01-01 04:00:00 2002-01-01 04:00:00

🌺4. 将数据切分成多个特征

python 复制代码
df = pd.DataFrame()
df['date'] = pd.date_range('1/1/2001', periods=150, freq='w')

创建年月日时分的特征

python 复制代码
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
python 复制代码
df.head()

.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

| | date | year | month | day | hour | minute |
| 0 | 2001-01-07 | 2001 | 1 | 7 | 0 | 0 |
| 1 | 2001-01-14 | 2001 | 1 | 14 | 0 | 0 |
| 2 | 2001-01-21 | 2001 | 1 | 21 | 0 | 0 |
| 3 | 2001-01-28 | 2001 | 1 | 28 | 0 | 0 |

4 2001-02-04 2001 2 4 0 0

🌻5.计算两个日期之间的时间差

python 复制代码
import pandas as pd
dataframe = pd.DataFrame()
dataframe['Arrived'] = [pd.Timestamp('01-01-2017'), pd.Timestamp('01-04-2017')]
dataframe['left'] = [pd.Timestamp('01-01-2017'), pd.Timestamp('01-06-2017')]
python 复制代码
# 计算两个特征直接的时间间隔
dataframe['left'] - dataframe['Arrived']
ini 复制代码
0   0 days
1   2 days
dtype: timedelta64[ns]
相关推荐
Angel Q.22 分钟前
特征提取 | DINO 到 DINOv3
图像处理·python
不如语冰1 小时前
AI大模型入门-pytorch-张量2 tensor创建
python
NPE~1 小时前
[AI]Agent开发——ADK框架使用
人工智能·python·ai·教程·adk·agent开发
矮个史蒂芬1 小时前
统计verilog .v文件中output 的bit数
python
gwf2162 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
爱吃提升2 小时前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
审小匠OpenCPAi2 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
元Y亨H3 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel
金銀銅鐵4 小时前
[Python] 用 turtle 来绘制瑞典国旗
python
Albert Edison4 小时前
【GUI 自动化测试】Pywinauto 常见操作
自动化测试·python·pywinauto