Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 如何获取datetime64列和1582年10月14日(公历)之间的时间差(以秒为单位)?_Python_Datetime_Pandas_Spss - Fatal编程技术网

Python 如何获取datetime64列和1582年10月14日(公历)之间的时间差(以秒为单位)?

Python 如何获取datetime64列和1582年10月14日(公历)之间的时间差(以秒为单位)?,python,datetime,pandas,spss,Python,Datetime,Pandas,Spss,我正在尝试将pandas dataframe转换为SPSS格式,但在转换datetime64变量时遇到问题 使用以下代码: import pandas as pd import datetime as dt df['date1'] = (df['date'] - pd.Timestamp('1582-10-15 00:00')).astype('timedelta64[s]') 或 我得到超限纳秒时间戳:1582-10-15 00:00:00错误 当我只是为了好玩而尝试使用1982时,它

我正在尝试将pandas dataframe转换为SPSS格式,但在转换datetime64变量时遇到问题

使用以下代码:

import pandas as pd

import datetime as dt

df['date1'] =  (df['date'] - pd.Timestamp('1582-10-15 00:00')).astype('timedelta64[s]')

我得到
超限纳秒时间戳:1582-10-15 00:00:00
错误

当我只是为了好玩而尝试使用1982时,它是有效的

我知道从1582年到1970年以及utc时间等时间段要进入新纪元是很困难的,但有简单的方法吗?
多谢各位

我相信
时间戳
会在这么早的日期中断,因为没有关于如何处理各种闰秒的记录,也没有什么记录。所以你得到的错误是时间最精确的分解。这是有道理的。这是说,对于这么久以前的一个日期来说,它不可能那么精确

解决方案 改用dt.datetime。它不需要那么高的精度

import pandas as pd

import datetime as dt

epoch = dt.datetime(1582, 10, 15)
date = dt.datetime(2016, 3, 31)

int((date - epoch).total_seconds())

使用来自以下方面的提示进行一些黑客攻击:


请参阅以了解如何处理越界时间df['epoch']=dt.datetime(1582,10,14)/df['date2']=int((df['date']-df['epoch'])。total_seconds()给出了相同的错误:越界时间:越界纳秒时间:1582-10-14 00:00:00我使用的解决方案是:df['DELTA_secs']=(dt.datetime(1970,1,1)-dt.datetime(1582,10,14)).total_seconds()df['date0']=(df['date']-dt.datetime(1970,1,1)).astype('timedelta64[s]')df['date2']=df['xxdate0']+df['DELTA_secs']df=df.drop(['DELTA_secs','date0',1)”,因此您得到的错误是对最精确时间的分解。”#在数百年的时间里精确到几秒钟,但不包括位置。。。
import pandas as pd

import datetime as dt

epoch = dt.datetime(1582, 10, 15)
date = dt.datetime(2016, 3, 31)

int((date - epoch).total_seconds())
df = pd.DataFrame(pd.date_range('2016-01-01', periods=5, freq = 'D'), columns = ['date'])
df
Out[291]: 
        date
0 2016-01-01
1 2016-01-02
2 2016-01-03
3 2016-01-04
4 2016-01-05

# PeriodIndex:
pi = pd.PeriodIndex(df['date'].astype(str), freq='s')
pi
Out[293]: 
PeriodIndex(['2016-01-01 00:00:00', '2016-01-02 00:00:00',
             '2016-01-03 00:00:00', '2016-01-04 00:00:00',
             '2016-01-05 00:00:00'],
            dtype='int64', freq='S')

# Period:
p0 = pd.Period('1582-10-15 00:00', freq='s')
p0
Out[295]: Period('1582-10-15 00:00:00', 'S')

# Then this is an Int64Index (in seconds):
idx = pi - p0
idx
Out[296]: Int64Index([13670899200, 13670985600, 13671072000, 13671158400, 13671244800], dtype='int64')
# idx.values gives a numpy array