如何将 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
。
请注意,this 和 this 都不起作用。遵循这些方法中的任何一种,我最终都会在数据框中使用 Timestamp
而不是 datetime
。
我使用的是 Python 3.8.5 和 Pandas 1.2.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