gpt4 book ai didi

python - datetime.timestamp 在 pandas apply 和 dataframe 选择中返回不同的值

转载 作者:行者123 更新时间:2023-12-01 00:02:16 25 4
gpt4 key购买 nike

问题

请参阅下面的代码来演示该问题。创建一个简单的 pandas 数据框,其中包含一个日期时间实例的一行和一列。如您所见,对 datetime 对象调用 timestamp() 返回 1581894000.0。通过数据帧选择日期时间对象并调用 timestamp() 给出 1581897600.0。当使用 pandas apply 函数对“date”列的每一行调用 datetime.timestamp 时,返回值变为 1581894000.0。我希望在所有情况下都能获得相同的 timestamp 值。

In[19]: d = datetime(2020, 2, 17)
In[20]: d.timestamp()
Out[20]: 1581894000.0 <----------------------------------+
In[21]: df = pd.DataFrame({'date': [d]}) |
In[22]: df |
Out[22]: |
date |
0 2020-02-17 |
In[23]: df['date'][0] |
Out[23]: Timestamp('2020-02-17 00:00:00') |
In[24]: df['date'][0].timestamp() |
Out[24]: 1581897600.0 <---------------------- These should be the same
In[25]: df['date'].apply(datetime.timestamp) |
Out[25]: |
0 1.581894e+09 |
Name: date, dtype: float64 |
In[26]: df['date'].apply(datetime.timestamp)[0] |
Out[26]: 1581894000.0 <----------------------------------+

编辑

感谢@ALollz的输入,使用pandas的to_datetimeTimestamp,如下所示似乎解决了问题。

In[15]: d = pd.to_datetime(datetime(2020,2,17))
In[16]: d.timestamp()
Out[16]: 1581897600.0
In[17]: df = pd.DataFrame({'date': [d]})
In[18]: df
Out[18]:
date
0 2020-02-17
In[19]: df['date'][0]
Out[19]: Timestamp('2020-02-17 00:00:00')
In[20]: df['date'][0].timestamp()
Out[20]: 1581897600.0
In[21]: df['date'].apply(pd.Timestamp.timestamp)
Out[21]:
0 1.581898e+09
Name: date, dtype: float64
In[22]: df['date'].apply(pd.Timestamp.timestamp)[0]
Out[22]: 1581897600.0

最佳答案

问题在于时区意识。 pandas 并不总是能很好地与 datetime 模块配合使用,并且某些决策与标准库有所不同,在本例中,如何处理不知道时区的 datetime 对象。

这个特定问题似乎是基于 this open issue 的设计选择

Yah, for tz-naive we implement timestamp as if it were UTC. Among other things, this ensures that we get the same behavior regardless of where the code is running.

因此,为了获得一致的答案,您需要一个 UTC 本地化时区,以便 datetime.timestamp 使用它而不是您计算机的本地时区。

<小时/>
from datetime import datetime
import pytz

my_date = datetime(2020, 2, 17)
my_date_aware = pytz.utc.localize(my_date)

# UTC aware is the same as pandas
datetime.timestamp(my_date_aware) - pd.to_datetime(my_date).timestamp()
#0

datetime.timestamp(my_date) - pd.to_datetime(my_date).timestamp()
#18000.0

关于python - datetime.timestamp 在 pandas apply 和 dataframe 选择中返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60256108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com