python - 用 two_datetime 转换两种格式的时间戳
问题描述
我有一个数据集,其中时间戳有两种不同的格式......
Tue Oct 30 12:57:49 +0000 2012
我
Tue Mar 11 13: 57: 22 +0000 2014
想将它们解析为 pd.datetime 格式。
到目前为止,我的方法是解析一种类型(使用 errors='ignore' 以便不触及不匹配的时间戳),然后用另一种格式解析第二次。
train['timestamp'] = pd.to_datetime(train['timestamp'], format='%a %b %d %H: %M: %S %z %Y', errors='ignore')
train['timestamp'] = pd.to_datetime(train['timestamp'], format='%a %b %d %H:%M:%S %z %Y')
在第二次调用时间戳时,我似乎遇到了一个错误,我本以为会被第一个表达式“拾取”:
ValueError: time data 'Tue Mar 11 23: 59: 22 +0000 2014' does not match format '%a %b %d %H:%M:%S %z %Y' (match)
我原以为Tue Mar 11 23: 59: 22 +0000 2014
会%a %b %d %H: %M: %S %z %Y
在第一行匹配,所以第二行不会以这种格式显示。
解决方案
通过查看这两个调用的输出,我们可以看到解析工作正常,但是 pandas 在获取混合数据时会将时间戳对象转换回字符串(时间戳表示成功,str 表示错误)
import pandas as pd
data1 = {
'timestamp': ['Tue Oct 30 12:57:49 +0000 2012','Tue Mar 11 13: 57: 22 +0000 2014']
}
train = pd.DataFrame.from_dict(data1)
list(map(type, pd.to_datetime(train['timestamp'], format='%a %b %d %H: %M: %S %z %Y', errors='ignore'))) #=> ['str','str']
通过运行,我们可以看到解析工作正常:
pd.to_datetime(train['timestamp'], format='%a %b %d %H: %M: %S %z %Y', errors='coerce')
其中一个失败,一个成功(并返回 NaT)
解决方案是使用以下方法转换为相同的格式:
pd.to_datetime(train['timestamp'].str.replace(' ',''), format='%a%b%d%H:%M:%S%z%Y')
或运行两个单独的解析并组合:
t1 = pd.to_datetime(train['timestamp'], format='%a %b %d %H: %M: %S %z %Y', errors='coerce')
t2 = pd.to_datetime(train['timestamp'], format='%a %b %d %H:%M:%S %z %Y', errors='coerce')
train['timestamp'] = t1.combine_first(t2)
推荐阅读
- swift - Swift 中的 UiSearchController 到 UiCollectionView
- opencv - opencv决策树回归,预测看不见的反应?
- azure-servicebusrelay - Azure Servicebus WCF 中继,地址已被具有不同设置的现有侦听器使用
- c# - 插入/删除/插入导致跟踪错误
- jquery - 使用 Bootstrap 3.3.7 将嵌入式 div 推送到其祖父母下方
- android - 根据移动设备 ID 对用户进行身份验证
- python - Statsmodels plot_simultaneous comparriosn_name 不起作用
- tensorflow - 预训练张量流神经网络模型
- javascript - 如何将值从选项选择传递到按钮中的 url
- xml - LocalDate 字段在 xml 响应中变为空白