首页 > 解决方案 > 熊猫时间戳到 datetime.datetime()

问题描述

我有一个带有时间戳列的数据框。我想将其转换为 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() 返回 datetime(预期) 如何使此数据帧重新分配持续存在?

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

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)}。应该是空集。

标签: pythonpandasdatetime

解决方案


你可以使用pd.DatetimeIndex和它的difference方法。一般来说,set与 Pandas / NumPy 对象一起使用是低效的。相关:Pandas pd.Series.isin 性能与 set 与 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)

推荐阅读