将字符串转换为日期时间熊猫

时间:2020-03-24 11:53:47

标签: python pandas datetime

我有一个DataFrame,其中包含应该转换为日期时间以便对DataFrame进行排序的字符串。这些字符串是从Syslog接收的。

enter image description here

字符串看起来像图片中和下面的字符串:

date
Mar 16 03:40:24.411
Mar 16 03:40:25.415
Mar 16 03:40:28.532
Mar 16 03:40:30.539
Mar 14 03:20:30.337
Mar 14 03:20:31.340
Mar 14 03:20:37.415

我尝试使用pandas.to_datetime()进行转换,但是收到以下错误:

OutOfBoundsDatetime:超出范围的纳秒级时间戳:1-03-16 03:40:24

我可能还需要纳秒。

2 个答案:

答案 0 :(得分:1)

必须用this reference指定字符串format。 没有年份,因此默认输出year

df['date'] = pd.to_datetime(df['date'], format='%b %d %H:%M:%S.%f')
print (df)
                     date
0 1900-03-16 03:40:24.411
1 1900-03-16 03:40:25.415
2 1900-03-16 03:40:28.532
3 1900-03-16 03:40:30.539
4 1900-03-14 03:20:30.337
5 1900-03-14 03:20:31.340
6 1900-03-14 03:20:37.415

您可以在列中添加一些年份,然后像这样进行解析:

df['date'] = pd.to_datetime('2020 ' + df['date'], format='%Y %b %d %H:%M:%S.%f')
print (df)
                     date
0 2020-03-16 03:40:24.411
1 2020-03-16 03:40:25.415
2 2020-03-16 03:40:28.532
3 2020-03-16 03:40:30.539
4 2020-03-14 03:20:30.337
5 2020-03-14 03:20:31.340
6 2020-03-14 03:20:37.415

答案 1 :(得分:0)

最好的方法是如上所述使用pandas.to_datetime。如果您不熟悉日期字符串格式,则可以使用日期解析器库来解决。示例dateutil库:

# python -m pip install —user dateutil
from dateutil import parser
import pandas as pd

df = pd.DataFrame({'dates': ['Mar 16 03:40:24.411',' Mar 16 03:40:25.415','Mar 16 03:40:28.532']})

# parse it
df['dates'] = df['dates'].apply(parser.parse)
print(df)

dateutil解析器会将当前年份添加到您的日期中。

vectoring

# using numpy.vectorize
import numpy as np
df['dates'] =  np.vectorize(parser.parse)(df['dates'])

注意:

这对于大型数据集不是可选的,仅在pd.to_datetime无法解析日期时才应使用。