Pandas的Timestamp转为datetime 类型

本文介绍了在Pandas中处理时间序列数据的常用方法,包括使用`pd.to_datetime()`将字符串转换为日期时间,以及利用`pd.date_range()`生成日期索引。通过示例展示了如何创建和操作时间戳,并探讨了如何在Pandas中将Timestamp转换为Python的datetime类型。此外,还讨论了Timestamp和datetime之间的转换方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Pandas中我们在处理时间序列的时候常用的方法有:

  • pd.to_datetime()
  • pd.date_range()

pandas生成时间索引

# pd.date_range()
index = pd.date_range("20210101",periods=20)
index
Out[29]: 
DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
               '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08',
               '2021-01-09', '2021-01-10', '2021-01-11', '2021-01-12',
               '2021-01-13', '2021-01-14', '2021-01-15', '2021-01-16',
               '2021-01-17', '2021-01-18', '2021-01-19', '2021-01-20'],
              dtype='datetime64[ns]', freq='D')


# pd.to_datetime()
df = pd.DataFrame(data=range(20210101,20210128),columns=["period"])
df["aa"] = pd.to_datetime(df["period"],format="%Y%m%d")
df
Out[24]: 
      period         aa
0   20210101 2021-01-01
1   20210102 2021-01-02
2   20210103 2021-01-03
3   20210104 2021-01-04
4   20210105 2021-01-05
5   20210106 2021-01-06
6   20210107 2021-01-07
7   20210108 2021-01-08
8   20210109 2021-01-09
9   20210110 2021-01-10
10  20210111 2021-01-11
11  20210112 2021-01-12
12  20210113 2021-01-13
13  20210114 2021-01-14
14  20210115 2021-01-15
15  20210116 2021-01-16
16  20210117 2021-01-17
17  20210118 2021-01-18
18  20210119 2021-01-19
19  20210120 2021-01-20
20  20210121 2021-01-21
21  20210122 2021-01-22
22  20210123 2021-01-23
23  20210124 2021-01-24
24  20210125 2021-01-25
25  20210126 2021-01-26
26  20210127 2021-01-27

index[1]
Out[30]: Timestamp('2021-01-02 00:00:00', freq='D')
df["aa"][1]
Out[31]: Timestamp('2021-01-02 00:00:00')
df["aa"][1] == index[1]
Out[32]: True

type(df["aa"][1])
Out[33]: pandas._libs.tslibs.timestamps.Timestamp
type(index[1])
Out[34]: pandas._libs.tslibs.timestamps.Timestamp

生成单个Timestamp

type(pd.Timestamp("20230101"))
Out[13]: pandas._libs.tslibs.timestamps.Timestamp
pd.Timestamp("20230101")
Out[14]: Timestamp('2023-01-01 00:00:00')

Timestamp与datetime

从上面代码可以看出,pandas中的时间格式是pandas._libs.tslibs.timestamps.Timestamp

但是python中常用的时间格式是datetime.datetime

  • to_pydatetime()
t = datetime(2021,1,2)
type(t)
Out[54]: datetime.datetime
t
Out[55]: datetime.datetime(2021, 1, 2, 0, 0)
r = (index[1].to_pydatetime())
type(r)
Out[57]: datetime.datetime
t == r
Out[58]: True

将pandas Timestamp 转为 datetime 类型

In [11]: ts = pd.Timestamp('2014-01-23 00:00:00', tz=None)
In [12]: ts.to_pydatetime()
Out[12]: datetime.datetime(2014, 1, 23, 0, 0)

It’s also available on a DatetimeIndex

rng = pd.date_range('1/10/2011', periods=3, freq='D')
rng.to_pydatetime()
Out[60]: 
array([datetime.datetime(2011, 1, 10, 0, 0),
       datetime.datetime(2011, 1, 11, 0, 0),
       datetime.datetime(2011, 1, 12, 0, 0)], dtype=object)
### 如何在Python Pandas库中正确使用Timestamp #### 创建Timestamp对象 `pd.Timestamp` 是用于表示单个时间戳的对象。可以通过多种方式创建 `Timestamp` 对象。 ```python import pandas as pd # 通过字符串创建 Timestamp ts_str = pd.Timestamp('2023-09-18') print(ts_str) # 通过日期组合创建 Timestamp from datetime import date ts_date = pd.Timestamp(date(2023, 9, 18)) print(ts_date) # 带有具体时间和时区信息的 Timestamp ts_tz = pd.Timestamp('2023-09-18 15:30:00', tz='Asia/Shanghai') print(ts_tz) ``` #### 时间戳的操作 一旦有了 `Timestamp` 对象,就可以执行各种操作来处理这些时间数据。 ##### 获取属性 可以直接访问年份、月份、星期几等属性: ```python timestamp = pd.Timestamp('2023-07-04') year = timestamp.year # 年份 month = timestamp.month # 月份 day_of_week = timestamp.dayofweek # 星期几 (周一为0) hour = timestamp.hour # 小时数 minute = timestamp.minute # 分钟数 second = timestamp.second # 秒数 print(f"Year={year}, Month={month}, DayOfWeek={day_of_week}") ``` ##### 进行算术运算 支持加减法以及与其他时间单位之间的转换: ```python one_day = pd.Timedelta(days=1) tomorrow = ts_str + one_day # 加一天得到明天的时间戳 yesterday = ts_str - one_day # 减去一天获得昨天的时间戳 print(tomorrow) print(yesterday) ``` #### 处理常见问题 当遇到与 `Timestamp` 相关的问题时,通常会涉及到解析错误或者格式化输出方面的问题。 ##### 解析失败的情况 如果传入无法识别的时间字符串,则可能会抛出异常。为了避免这种情况发生,在不确定输入格式的情况下建议先尝试标准化输入再传递给 `pd.to_datetime()` 方法来进行安全转换[^1]。 ##### 自定义显示格式 有时默认打印出来的 `Timestamp` 可能不符合预期的要求,这时可以利用 `.strftime()` 来指定想要展示的形式: ```python formatted_time = tomorrow.strftime('%Y-%m-%d %H:%M:%S') print(formatted_time) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

现实、狠残酷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值