当前位置: 首页 > 面试题库 >

在Python中将日期时间列转换为纪元

顾乐家
2023-03-14
问题内容

我目前在使用Python时遇到问题。我有一个Pandas DataFrame,列之一是带有日期的字符串。格式为:

“%Y-%m-%d%H:%m:00.000”。例如:“ 2011-04-24 01:30:00.000”

我需要将整列转换为整数。我尝试运行此代码,但是它非常慢,并且有几百万行。

    for i in range(calls.shape[0]):
        calls['dateint'][i] = int(time.mktime(time.strptime(calls.DATE[i], "%Y-%m-%d %H:%M:00.000")))

你们知道如何将整个列转换为纪元时间吗?

提前致谢 !


问题答案:

将字符串转换为datetimeusing to_datetime,然后减去datetime
1970-1-1并调用dt.total_seconds()

In [2]:
import pandas as pd
import datetime as dt
df = pd.DataFrame({'date':['2011-04-24 01:30:00.000']})
df

Out[2]:
                      date
0  2011-04-24 01:30:00.000

In [3]:
df['date'] = pd.to_datetime(df['date'])
df

Out[3]:
                 date
0 2011-04-24 01:30:00

In [6]:    
(df['date'] - dt.datetime(1970,1,1)).dt.total_seconds()

Out[6]:
0    1303608600
Name: date, dtype: float64

您可以看到,将此值转换回产生的时间相同:

In [8]:
pd.to_datetime(1303608600, unit='s')

Out[8]:
Timestamp('2011-04-24 01:30:00')

因此,您可以添加新列或覆盖:

In [9]:
df['epoch'] = (df['date'] - dt.datetime(1970,1,1)).dt.total_seconds()
df

Out[9]:
                 date       epoch
0 2011-04-24 01:30:00  1303608600

编辑

@Jeff建议的更好的方法:

In [3]:
df['date'].astype('int64')//1e9

Out[3]:
0    1303608600
Name: date, dtype: float64

In [4]:
%timeit (df['date'] - dt.datetime(1970,1,1)).dt.total_seconds()
%timeit df['date'].astype('int64')//1e9

100 loops, best of 3: 1.72 ms per loop
1000 loops, best of 3: 275 µs per loop

您还可以看到它明显更快



 类似资料:
  • 上下文是,我们的产品中有一个现有的应用程序,它生成并向现有的oracle过程发送纪元号&反之亦然。它在该过程中使用如下内容 当我尝试这些查询时,它对我也适用于Oracle10g服务器(如果有关系的话,还有Oracle sql Developer4.x)。 在现有的过程中,要求将值保存为日期本身(时间组件与日期无关),但是在新的要求中,我必须将unix EPOCH值转换为日期时间(小时/分钟/秒级别

  • 问题内容: 是否有一个内置的转换方法为在Python,例如获得在指定日期的午夜?相反的转换很容易:有一个方法。 我真的必须手动打电话吗? 问题答案: 您可以使用;现在,您创建一个初始化为午夜的对象。

  • 问题内容: 我已经多次看到这个问题,似乎没有答案是我需要的。 我有一个长类型变量,其中存储了一个纪元时间。 我想做的就是将其转换为字符串 例如,如果存储的纪元时间是今天,那么最后的字符串将显示为: 2012年3月17日 我将如何处理? 问题答案: 看看SimpleDateFormat

  • 我有一个UTC时间,我想知道从epoch开始的秒数。 我正在使用strftime将其转换为秒数。以2012年4月1日为例。 2012年4月1日,来自epoch的UTC为1333238400,但上面返回的是1333234800,相差1小时。 因此,看起来strftime正在考虑我的系统时间,并在某个地方应用时区偏移。我以为约会时间纯粹是天真的? 我该如何解决这个问题?如果可能,除非是标准的,否则避免

  • 问题内容: 有谁知道如何将JS dateTime转换为MySQL datetime?还有一种方法可以向JS日期时间添加特定的分钟数,然后将其传递给MySQL日期时间? 问题答案: 尽管JS确实拥有足够的基本工具来执行此操作,但它相当笨拙。

  • 问题内容: 我已经为此战斗了一段时间。我正在尝试将纪元转换为日期对象。时代以UTC发送给我。每当您经过一个纪元时,它就会假定它是本地纪元。我尝试创建一个UTC对象,然后使用它来将其调整为适当的纪元,但是似乎有用的唯一方法是字符串对我没有帮助。如果我将该字符串传递给新日期,则应该注意它是UTC,但不是。 我的下一个尝试是尝试获取本地当前时间段与UTC当前时间段之间的差异,但是我也无法做到这一点。 它