【问题标题】:Conversion of a date timestamp column in pandas to a correct format将 pandas 中的日期时间戳列转换为正确的格式
【发布时间】:2014-10-21 16:11:43
【问题描述】:

我有一列格式如下:

01JAN2014:08:22:00
01JAN2014:09:01:00
01JAN2014:10:00:00
01JAN2014:10:32:00

Tableau 无法读取此内容,因为我认为它的日期格式有误。我试过在画面中转换它,但它仍然不起作用。所以我想通过解析月、日、年和时间戳来重新创建列。然后将列加入到 Tableau 和其他东西可以读取的%Y-%m-%d %H:%M:%S 格式中。

我尝试在 python 中运行它

import pandas as pd
dates = pd.read_csv(filelocation)['ENTERED_TIME']
from datetime import datetime
for date in dates:
    d = datetime.strptime(date,'%d-%m-%Y:%H:%M:%S')

但它不起作用,因为它说以下内容:

time data '01JAN2014:08:22:00' does not match format '%d-%m-%Y:%H:%M:%S'

【问题讨论】:

  • 能否给我们您的真实代码,因为您发布的代码显然不会给出该错误。
  • 根据docs,你需要去掉连字符,把%m变成%b
  • 即使您编辑了代码,我的评论仍然是您问题的答案。

标签: python datetime pandas


【解决方案1】:

试试这个:

In [1]: from datetime import datetime

In [2]: d = "01JAN2014:08:22:00"

In [3]: d_ = datetime.strptime(d, "%d%b%Y:%H:%M:%S")

In [4]: d_
Out[4]: datetime.datetime(2014, 1, 1, 8, 22)

pandas:

import pandas as pd
from datetime import datetime

s = ["01JAN2014:08:22:00",
     "01JAN2014:09:01:00",
     "01JAN2014:10:00:00",
     "01JAN2014:10:32:00"]

s_ = pd.Series(s)

print s_.apply(lambda x:datetime.strptime(x,"%d%b%Y:%H:%M:%S"))

pandas 中的输出:

0   2014-01-01 08:22:00
1   2014-01-01 09:01:00
2   2014-01-01 10:00:00
3   2014-01-01 10:32:00
dtype: datetime64[ns]
[Finished in 0.5s]

【讨论】:

  • 非常感谢。有没有办法优化这个?我正在尝试运行 1,700,000 行。
  • 如果回答了您的问题,请将答案标记为已接受。最后,我针对 100 万行对其进行了测试,并返回了 17.9 秒。除非你是集体这样做,否则对 170 万人来说,略高于或加倍似乎并没有那么糟糕。
【解决方案2】:

您可以在读取输入文件时解析日期列:

from datetime import datetime
import pandas as pd

series = pd.read_csv(filelocation, parse_dates=['ENTERED_TIME'],
    date_parser=lambda s: datetime.strptime(s, "%d%b%Y:%H:%M:%S"))

read_csv() docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2016-11-26
    • 2016-10-05
    • 1970-01-01
    • 2021-11-30
    • 2019-02-25
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多