3

我有一个大型数据集,其中包含以下格式的各种日期信息:

熟悉python的time模块,strptime()方法,strftime()方法。但是,如果有一个 python 模块可以用来转换这些不寻常的日期格式,我不确定上面的这些日期格式是什么。

知道如何在不编写我自己的计算器的情况下从这些不寻常的日期格式中获取 %Y%M%D 格式吗?

谢谢。

4

6 回答 6

9

您可以尝试以下方法:

In [1]: import datetime

In [2]: s = '2012265'

In [3]: datetime.datetime.strptime(s, '%Y%j')
Out[3]: datetime.datetime(2012, 9, 21, 0, 0)

In [4]: d = '41213'

In [5]: datetime.date(1900, 1, 1) + datetime.timedelta(int(d))
Out[5]: datetime.date(2012, 11, 2)

第一个比较棘手,但它使用%j参数来解释您提供的年份(在四位数年份之后,由 表示%Y)。第二个是自 1900 年 1 月 1 日以来的天数。

这是一般转换 - 不确定您的输入格式,但希望可以对其进行调整以适应它。

于 2013-01-11T04:56:47.600 回答
4

在 Excel 整数到 Python 日期时间位:

请注意,有两个 Excel 日期系统(一个基于 1900 年 1 月 1 日,另一个基于 1904 年 1 月 1 日);有关详细信息,请参阅https://support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

另请注意,该系统不是从零开始的。因此,在 1900 系统中,1900 年 1 月 1 日是第 1 天(不是第 0 天)。

import datetime

EXCEL_DATE_SYSTEM_PC=1900
EXCEL_DATE_SYSTEM_MAC=1904

i = 42129  # Excel number for 5-May-2015
d = datetime.date(EXCEL_DATE_SYSTEM_PC, 1, 1) + datetime.timedelta(i-2)
于 2015-05-05T16:51:25.230 回答
2

这两种格式似乎都非常易于使用。事实上,第一个只是一个整数,所以你为什么不做这样的事情呢?

import datetime

def days_since_jan_1_1900_to_datetime(d):
    return datetime.datetime(1900,1,1) + \
        datetime.timedelta(days=d)

对于第二个,详细信息取决于格式的确切定义方式(例如,即使天数少于 100 天,您是否总能期待 3 位数,或者是否有可能有 2 或 1 - 如果那么,年份总是 4 位数吗?)但是一旦你把那部分记下来,它就可以非常相似地完成。

于 2013-01-11T04:56:53.887 回答
0

根据http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior ,一年中的一天是“%j”,而第一种情况可以通过 toordinal() 和从序数():date.fromordinal(date(1900, 1, 1).toordinal() + x)

于 2013-01-11T04:56:26.630 回答
0

我认为timedelta。

import datetime
d = datetime.timedelta(days=41213)
start = datetime.datetime(year=1900, month=1, day=1)
the_date = start + d

对于第二个,您可以2012265[:4]获取年份并使用相同的方法。

编辑:查看第二个答案%j

于 2013-01-11T04:58:41.593 回答
0
from datetime import datetime 

df(['timeelapsed'])=(pd.to_datetime(df['timeelapsed'], format='%H:%M:%S') - datetime(1900, 1, 1)).dt.total_seconds()
于 2019-05-07T10:40:06.710 回答