【问题标题】:datetime not converting uppercase month abbrevations日期时间不转换大写月份缩写
【发布时间】:2018-03-27 14:13:48
【问题描述】:

我有 160 万行数据,我需要计算两个日期之间的差异。我已从 excel 文件中读取数据,然后查找列的 dtypes。日期和时间列都有对象数据类型。我需要将这些列转换为日期时间。我已经尝试过了,但它只适用于时间而不适用于日期。我尝试了以下方法:

test = pd.read_excel(datadir+'test.xlsx', sheetname = 'Sheet1' )
test['time'] =  pd.to_datetime(test['time'], format='%H:%M:%S')
test['date'] =  pd.to_datetime(test['date'], format='%d%b%y') 

它确实适用于时间但不适用于日期并给出以下错误:ValueError:未转换的数据仍然存在:14

我也尝试过不指定日期格式,但后来我得到 ValueError: Unknown string format

print(len(test['date'])) 返回 7 print(test['date'].iloc[0]) 返回 17JAN2014。

这里是示例数据: 约会时间 2014 年 1 月 17 日 12:48 2014 年 1 月 18 日 13:15 2014 年 1 月 17 日 09:20 2014 年 1 月 18 日 07:45 2012 年 2 月 4 日 10:00 2012 年 2 月 5 日 17:22 2012 年 3 月 12 日 19:50

我不知道出了什么问题。任何帮助将不胜感激。还有一件事,谁能告诉我如何将日期和时间列合并为一列作为日期时间?

【问题讨论】:

    标签: pandas datetime


    【解决方案1】:

    年份有问题,需要Y匹配YYYYy匹配YY
    还要检查http://strftime.org/

    df['date'] =  pd.to_datetime(df['date'], format='%d%b%Y')
    print (df)
            date   time
    0 2014-01-17  12:48
    1 2014-01-18  13:15
    2 2014-01-17  09:20
    3 2014-01-18  07:45
    4 2012-02-04  10:00
    5 2012-02-05  17:22
    6 2012-03-12  19:50
    

    【讨论】:

    • 谢谢。放置 %Y 非常适合样本数据。我刚刚在具有 1.6M 行的最终数据集上尝试了相同的操作,但出现以下错误: OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 2999-12-31 00:00:00 。你明白这是什么意思吗?
    • 表示数据无效,因为out of limits。一种可能的解决方案是通过df['date'] = pd.to_datetime(df['date'], format='%d%b%Y', errors='coerce') 将有问题的日期转换为NaTs,使用此数据是possible,但从字符串转换很痛苦,我认为应用是必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-12-09
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多