熊猫:将字符串转换为 datetime.datetime

时间:2021-07-09 09:58:21

标签: python pandas datetime type-conversion

如何将 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

请注意,thisthis 都不起作用。遵循这些方法中的任何一种,我最终都会在数据框中使用 Timestamp 而不是 datetime

我使用的是 Python 3.8.5 和 Pandas 1.2.1。

1 个答案:

答案 0 :(得分:1)

您可以在所有操作后看到,所有 datetime 对象系列在添加到数据帧时都会自动转换为时间戳:

>>> 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

我建议你使用内置的 pandas 日期时间处理,它绝对不比 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