• Pandas 基础(17)


    这一节依然是关于时间的知识, 在平时的工作中, 有一个非常令我们恼火的就是时间的格式可以有很多种表达, 比如下面这张图, 我们看到同样是 2017年1月5日, 可以有很多种时间的格式, 我们需要先将格式统一才能进行下面的工作, Pandas 提供了这个函数 to_datetime(). 

    下面通过一个例子来看下它的具体用法:

    import pandas as pd
    dates = ['2017-01-05', 'Jan 5, 2017', '01/05/2017', '2017.01.05', '2017/01/05','20170105']
    pd.to_datetime(dates)
    

    输出: 

    DatetimeIndex(['2017-01-05', '2017-01-05', '2017-01-05', '2017-01-05',
                   '2017-01-05', '2017-01-05'],
                  dtype='datetime64[ns]', freq=None)
    

    来看下加上时间的效果:

    dates = ['2017-01-05 2:30:00 PM', 'Jan 5, 2017 14:30:00', '01/05/2016', '2017.01.05', '2017/01/05','20170105']
    pd.to_datetime(dates)
    

    输出:

    DatetimeIndex(['2017-01-05 14:30:00', '2017-01-05 14:30:00',
                   '2016-01-05 00:00:00', '2017-01-05 00:00:00',
                   '2017-01-05 00:00:00', '2017-01-05 00:00:00'],
                  dtype='datetime64[ns]', freq=None)
    

    如果时间的 list 里有无法转换的字符呢?

    dates = ['2017-01-05 2:30:00 PM', 'Jan 5, 2017 14:30:00', '01/05/2016', '2017.01.05', '2017/01/05','20170105', 'ABC']
    pd.to_datetime(dates)
    

    报错了:

    TypeError                                 Traceback (most recent call last)
    /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
        376             try:
    --> 377                 values, tz = conversion.datetime_to_datetime64(arg)
        378                 return DatetimeIndex._simple_new(values, name=name, tz=tz)
    
    pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.datetime_to_datetime64()
    
    TypeError: Unrecognized value type: <class 'str'>
    
    During handling of the above exception, another exception occurred:
    

    这种情况下, 我们需要给 to_datetime() 函数加个参数:

    dates = ['2017-01-05 2:30:00 PM', 'Jan 5, 2017 14:30:00', '01/05/2016', '2017.01.05', '2017/01/05','20170105', 'ABC']
    pd.to_datetime(dates, errors='ignore')
    

    输出:

    array(['2017-01-05 2:30:00 PM', 'Jan 5, 2017 14:30:00', '01/05/2016',
           '2017.01.05', '2017/01/05', '20170105', 'ABC'], dtype=object)
    

    非时间字符被原样输出了, 还可以设置第二个参数 errors='coerce':

    pd.to_datetime(dates, errors='coerce')
    

    输出:

    DatetimeIndex(['2017-01-05 14:30:00', '2017-01-05 14:30:00',
                   '2016-01-05 00:00:00', '2017-01-05 00:00:00',
                   '2017-01-05 00:00:00', '2017-01-05 00:00:00',
                                   'NaT'],
                  dtype='datetime64[ns]', freq=None)
    

    我们知道关于时间的格式, 美国跟欧洲的格式是不一样的, 如下图所示:

    如果以欧洲的时间格式表示 2019年1月5日, 应该会写成这样:

    pd.to_datetime('5/1/2019')
    

    但是默认输出是按照美国的标准:

    Timestamp('2019-05-01 00:00:00')
    

    这时, 可以加一个参数指明第一个值为 day:

    pd.to_datetime('5/1/2019', dayfirst=True)
    

    输出:

    Timestamp('2019-01-05 00:00:00')
    

    我们通常会用斜线作为年月日的分隔线, 但是其实这个分隔符是可以用任意字符代替的, 比如 $, 比如 #, 因为 Pandas 提供了一个参数 format 可以用来定义时间的表达格式, 比如下面的例子:

    pd.to_datetime('5$1$2019', format='%d$%m$%Y')
    

    输出:

    Timestamp('2019-01-05 00:00:00')
    

    用 # 做分隔符的例子:

    pd.to_datetime('5#1#2019', format='%d#%m#%Y')
    

    输出:

    Timestamp('2019-01-05 00:00:00')
    

    格林威治时间是从1970年1月1日开始累计的秒数的总和. 
    我们可以通过下面这个网站获取时时的格林威治时间:
    Epoch & Unix Timestamp Conversion Tools
    可以用 to_datetime() 函数转换格林威治时间:

    t = 1551966534
    pd.to_datetime(t, unit='s')
    

    输出:

    Timestamp('2019-03-07 13:48:54')
    

    以 list 的形式传参, 以得到 list 的时间格式:

    t = 1551966534
    dt = pd.to_datetime([t], unit='s')
    dt
    

    输出:

    DatetimeIndex(['2019-03-07 13:48:54'], dtype='datetime64[ns]', freq=None)
    

    通过 Pandas 的 view() 函数还可以将其再转换成格林威治时间:

    dt.view('int64')
    

    输出:

    array([1551966534000000000])
    

    以上, 就是关于 to_datetime() 函数的基本使用方法, enjoy~~~

  • 相关阅读:
    IntelliJ Idea 快捷键列表
    mysql索引类型和方式
    基本git指令
    idea中deBug方法
    BeanUtils.copyProperties(A,B)使用注意事项
    MySQL字段类型
    JAVA常识1
    Redis在windows下的安装下载
    Netty
    IDEA工具
  • 原文地址:https://www.cnblogs.com/rachelross/p/10493556.html
Copyright © 2020-2023  润新知