Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python datetime.timestamp在应用和数据帧选择中返回不同的值 问题:_Python_Python 3.x_Pandas_Datetime - Fatal编程技术网

Python datetime.timestamp在应用和数据帧选择中返回不同的值 问题:

Python datetime.timestamp在应用和数据帧选择中返回不同的值 问题:,python,python-3.x,pandas,datetime,Python,Python 3.x,Pandas,Datetime,请参阅下面演示问题的代码。创建一个简单的dataframe,其中一行一列包含一个datetime实例。如您所见,对datetime对象调用timestamp()将返回1581894000.0。通过数据帧选择datetime对象并调用timestamp()将给出1581897600.0。使用pandasapply函数调用“日期”列每行的datetime.timestamp时,返回值变为1581894000.0。我希望在所有情况下都能得到相同的时间戳值 In[19]: d = datetime(20

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

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

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

这个特定的问题似乎是一个基于

是的,对于tz naive,我们将时间戳当作UTC来实现。除此之外,这确保了无论代码在哪里运行,我们都能获得相同的行为

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



谢谢我想我现在理解了这个问题,并试图坚持使用pandas中的功能。请参阅我的问题的编辑部分,了解我是如何使用您的建议修复的。@MartinRindarøy您可以稍微了解一下,但我认为问题主要在于日期时间。时间戳使用您的系统确定为“本地时间”的任何东西,因此除非是UTC,否则它们不会匹配。@ALollz:这是原因吗
datetime.timestamp(p)
p=pd.Timestamp(2020,2,17)
上的
pd.Timestamp.Timestamp(p)
返回不同的值,尽管
pd.Timestamp
datetime.datetime
的子类?@ALollz:谢谢。我从你的答案和链接中学到了不少新东西:)+1
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
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