【问题标题】:Pandas Timestamp to datetime.datetime()熊猫时间戳到 datetime.datetime()
【发布时间】:2019-06-08 01:05:44
【问题描述】:

我有一个带有时间戳列的数据框。我想将其转换为 datetime.datetime 格式。这是我尝试过的:

import pandas as pd

ts = pd.Timestamp('2019-01-01 00:00:00', tz=None)
df = pd.DataFrame({"myDate": [ts]})

df["myDate"] = df["myDate"].dt.to_pydatetime()
myList = df["myDate"].dt.to_pydatetime()

print(df.dtypes)
print(type(myList[0]))

第一个 print() 返回一个时间戳(意外) 第二个 print() 返回日期时间(预期) 如何使此数据帧重新分配持续存在?

* 编辑:我想要实现的目标 * 将数据框中的时间戳与列表中的日期时间进行比较,如下所示:

ts = pd.Timestamp('2019-01-01 00:00:00', tz=None)
df = pd.DataFrame({"my_date": [ts]})
df_set = set(df["my_date"].values)
dt_set = set([datetime(2019, 1, 1, 0, 0, 0)])
print(dt_set - df_set)

返回:{datetime.datetime(2019, 1, 1, 0, 0)}。应该是空集。

【问题讨论】:

  • 我不明白你的意思....我需要将我的数据框的日期时间索引与我代码中其他地方的日期列表进行比较
  • 您不需要to_pydatetime()。我建议您更新您的问题,以解释您想要实现的总体目标。

标签: python pandas datetime


【解决方案1】:

您可以使用pd.DatetimeIndex 及其difference 方法。一般来说,将set 与 Pandas / NumPy 对象一起使用是低效的。相关:Pandas pd.Series.isin performance with set versus array

from datetime import datetime

df = pd.DataFrame({"my_date": [pd.Timestamp('2019-01-01 00:00:00', tz=None),
                               pd.Timestamp('2019-01-10 00:00:00', tz=None)]})

datetime_list = [datetime(2019, 1, 1, 0, 0, 0)]

diff = pd.DatetimeIndex(df['my_date']).difference(pd.DatetimeIndex(datetime_list))

# DatetimeIndex(['2019-01-10'], dtype='datetime64[ns]', freq=None)

【讨论】:

  • 谢谢。现在 to_pydatetime() 对这个结果起作用。你知道为什么我不能把它分配给我的数据框。即有什么问题: df["myDate"] = df["myDate"].dt.to_pydatetime()
  • @GlaceCelery,我没有研究过 Pandas 的内部结构,但this answer 提出了基本原理。pd.Timestamp 提供了datetime.datetime 功能的超集,并且效率更高,因为后台使用 NumPy int64 数组。
猜你喜欢
  • 2020-12-06
  • 1970-01-01
  • 2019-06-16
  • 2019-07-19
  • 2013-02-03
  • 1970-01-01
  • 2016-06-27
  • 2017-02-23
相关资源
最近更新 更多