我有一个DataFrame,其中包含应该转换为日期时间以便对DataFrame进行排序的字符串。这些字符串是从Syslog接收的。
字符串看起来像图片中和下面的字符串:
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
我可能还需要纳秒。
答案 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解析器会将当前年份添加到您的日期中。
# using numpy.vectorize
import numpy as np
df['dates'] = np.vectorize(parser.parse)(df['dates'])
这对于大型数据集不是可选的,仅在pd.to_datetime
无法解析日期时才应使用。