我有一个带有Timestamp列的数据框。我想将其转换为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)}。应该为空集。
答案 0 :(得分:2)
您可以使用pd.DatetimeIndex
及其difference
方法。通常,对熊猫/ NumPy对象使用set
效率不高。相关: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)