pandas:将字符串转换为datetime.datetime

rqcrx0a6  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(556)

我怎样才能包括 datetime 进入 pd.DataFrame ?

import pandas as pd
from datetime import datetime

df = pd.DataFrame({"a": ['2002-02-02', '2002-02-03', '2002-02-04']})
df["b"] = df["a"].apply(lambda t: datetime.strptime(t, '%Y-%m-%d'))  # datetime.strptime returns datetime.datetime
print(datetime(2002, 2, 2) in df["b"])

输出 False .
同样地,

f["c"] = df["b"].apply(lambda t: t.to_pydatetime())
print(datetime(2002, 2, 2) in df["c"])

输出 False .
请注意,这个和这个都不起作用。按照这些方法中的任何一种,我最终都会 Timestamp s代替 datetime 在数据框中。
我正在使用python 3.8.5和pandas 1.2.1。

pcww981p

pcww981p1#

你可以看到在你所有的操作之后 datetime OBEJCT在添加到 Dataframe 时自动转换为时间戳:

>>> df
            a          b          c
0  2002-02-02 2002-02-02 2002-02-02
1  2002-02-03 2002-02-03 2002-02-03
2  2002-02-04 2002-02-04 2002-02-04
>>> df.dtypes
a            object
b    datetime64[ns]
c    datetime64[ns]
dtype: object

我建议您使用内置的datetime处理,它肯定不会比python难多少 datetime 物体:

>>> pd.Timestamp(2002, 2, 2) in df['b'].to_list()
True
>>> df['b'].eq(pd.Timestamp(2002, 2, 2))
0     True
1    False
2    False
Name: b, dtype: bool
>>> df['b'].eq(pd.Timestamp(2002, 2, 2)).any()
True

此外,这为进一步处理python无法处理的日期和时间提供了大量可能性 datetime 物体。
例如,您可以直接进行比较 str 而不是建筑 Timestamp 物体:

>>> df['b'].eq('2002-02-02')
0     True
1    False
2    False
Name: b, dtype: bool

相关问题