美文网首页python开发Python
有人问我如何用python实现字符串转日期?我用Jupyter

有人问我如何用python实现字符串转日期?我用Jupyter

作者: 奈何缘浅wyj | 来源:发表于2021-06-13 22:39 被阅读0次

    本次内容用到的python编辑器是anconda下的jupyter notebook

    所以在本次内容开始之前给大家介绍如何在Windows下加载jupyter notebook进行python的调试~~~~

    1、什么是Jupyter Notebook

    Jupyter Notebook,又称为IPython notebook,是一个交互式笔记本,支持运行40+种编程语言,可以用来编写漂亮的交互式文档。

    你要向别人解释你的程序, 你可能要新建一个word,把代码复制进去, 对每块代码进行讲解。 这样会有几个问题:

    1. 代码格式不好看;
    2. 代码的配色丢失;
    3. 代码与文字解释部分区分不明显。

    使用Jupyter Notebook,可以让代码保持其在编辑器里面的格式,看起来很正规。 而且, 复制进去的代码是可以运行的。

    敲击完代码之后,按Shift+Enter, 或者上面的Run Cell键变可以得到代码运行结果。

    2、 Windows下安装及使用Jupyter Notebook

    2.1 安装Jupyter Notebook

    打开windows命令窗口cmd,在没有安装Jupyter Notebook,在命令行输入Jupyter Notebook会报错,如下:

    image
    输入如下命令,下载jupyter notebook image

    经过一段时间后会显示下载成功,如下:


    image

    打开windows命令窗口cmd,输入命令打开jupyter notebook


    image
    待以上保持不动后,浏览器就会打开一个页面,如下图:
    在这里插入图片描述
    此时,我们就在这里创建文件,编写我们的代码

    注意:我们打开的windows命令窗口cmd不要关闭哦!

    2.2 创建ipynb文件

    1. 选择右上角的new,选择python3
    在这里插入图片描述
    1. 进入代码编写环境,如下图:
    image

    3、利用pd的date_range生成日期数据

    import pandas as pd
    pd.date_range( )
    

    同生成随机数的思想类似,使用pandas库中的函数

    pd.date_range(start=None,end=None,periods=None,freq=None,tz=None,normalize=False,name=None,close=None,**kwargs)
    

    3.1 设定开始时间、长度、频率

    start_date='20210101'
    length=10
    date_1=pd.date_range(start=start_date,periods=10).tolist()  #默认freq为D,每天
    date_1
    
    image.png

    也可以设置频率freq=‘M'

    date_1=pd.date_range(start=start_date,periods=10,freq='M')
    date_1
    
    image.png

    3.2 设定起始、终止时间、频率

    start_date='20210101'
    end_date='20210110'
    date_2=pd.date_range(start=start_date,end=end_date,freq='D')  #默认为D
    date_2
    
    image.png

    频率freq的设置有:

    D --- Day --- 每日
    B --- BusinessDay --- 每工作日
    H --- Hour --- 每小时
    T/min --- Minute ---每分钟
    S --- Second --- 每秒
    M --- MonthEnd --- 每月最后一个日历日
    Q --- Quater --- 每季度
    

    注意上面生成的日期数据,就是list格式,在构建数据框时可以直接用。

    pd.DataFrame({'Time':date_1})
    
    image.png

    4、字符串转化为日期

    导入数据时常会出现,日期型数据导入后,变成字符串格式,在后续使用时,需要转化为日期。

    构造一个时间数据

    import numpy as np
    start_date='20210613'
    gap=100
    
    date_list1=pd.date_range(start=start_date,periods=gap).strftime('%Y%m%d').tolist()
    print(date_list1[1:10])
    print(len(date_list1))
    
    image.png
    num1=np.random.randint(1,101,100)   #生成1-101的随机整数
    num2=np.random.randint(100,201,100)
    df_temp=pd.DataFrame({'Time':date_list1,
                         'Number1':num1,
                         'Number2':num2})
    df_temp.head()
    
    
    image.png

    上面数据构造时,为了方便之后举例子,将生成的时间数据转化为字符串后,构造的数据框。

    4.1 pd.to_datetime()

    print(df_temp['Time'].dtype)
    print(pd.to_datetime(df_temp['Time']).dtype)
    

    输出:

    object
    datetime64[ns]
    

    pd.datetime这个函数可以直接作用在数据框的列上面,直接转换。

    4.2 datetime.strptime

    注意区分:

    from datetime import datetime
    datetime.strftime() #由日期格式转化为字符串
    datetime.strptime()  #由字符串格式转化为日期
    

    例子:

    from datetime import datetime
    print(datetime.strptime('20210101','%Y%m%d'))
    print(datetime.strptime('2021-01-01','%Y-%m-%d'))
    
    image.png

    但是这个函数只能作用一个值,如果对数据框的列进行操作,需要首先定义一个函数:

    from datetime import datetime
    def date_ch(value):
        return datetime.strptime(value,'%Y%m%d')
     
    print(date_ch('20210613'))
    df_temp['Time']=df_temp['Time'].apply(date_ch)
    df_temp['Time']
    
    image.png

    5、从日期数据中提取成分

    5.1 直接提取:

    pd.to_datetime('20210613').month
    
    #year:日
    #month:月
    #week:周
    #day:日
    
    image.png

    5.2 使用strftime函数:

    pd.to_datetime('20210613').strftime('%Y-%m')
    
    image.png

    5.3 字符串切片截取

    数据如下:

    image.png
    def date_ch(value):
        str_value=value.strftime('%Y-%m-%d')
        month=str_value[5:7]
        return month
    df_temp['Time'].apply(date_ch)
    #或者
    #df_temp['Time'].apply(lambda x:date_ch(x))
    
    image.png

    strftime函数提取日期成分中,日期的标准化格式符号:

    %a  星期的简写。如 星期三为Web
    %A  星期的全写。如 星期三为Wednesday
    %b  月份的简写。如4月份为Apr
    %B  月份的全写。如4月份为April 
    %c:  日期时间的字符串表示。(如: 05/01/10 09:00:20)
    %d:  日在这个月中的天数
    %f:  微秒(范围[0,999999])
    %H:  小时(24小时制,[0, 23])
    %I:  小时(12小时制,[0, 11])
    %j:  日在年中的天数 [001,366]
    %m:  月份([01,12])
    %M:  分钟([00,59])
    %p:  AM或者PM
    %S:  秒(范围为[00,61])
    %U:  周在当年的周数当年的第几周),星期天作为周的第一天
    %w:  今天在这周的天数,范围为[0, 6],6表示星期天
    %W:  周在当年的周数,星期一作为周的第一天
    %x:  日期字符串(如:05/01/20)
    %X:  时间字符串(如:09:00:20)
    %y:  2个数字表示的年份
    %Y:  4个数字表示的年份
    %z:  与utc时间的间隔 (如果是本地时间,返回空字符串)
    %Z:  时区名称(如果是本地时间,返回空字符串)
    

    6、python将任何格式的时间字符串转换为datetime

    首先利用pip下载python资源包:pip install python-dateutil

    
    from dateutil.parser import parse
    
    date_string_array = [
        '2021-06-13 08:15:27.243860',
        'Jun 13 2021  7:40AM',
        'Jun 13 2021 at 7:40AM',
        'September 20, 2020, 22:19:55',
        'Sun, 05/12/1999, 12:30PM',
        'Mon, 21 March, 2015',
        '2018-03-12T10:12:45Z',
        '2018-06-29 17:08:00.586525+00:00',
        '2018-06-29 17:08:00.586525+05:00',
        'Tuesday , 6th September, 2017 at 4:30pm'
    ]
    
    for date in date_string_array:
        print('Parsing: ' + date)
        dt = parse(date)  # 时间转换
        print(dt.date())
        print(dt.time())
        print(dt.tzinfo)
        print('\n')
    
    image.png image.png image.png

    7、「❤️ 感谢大家」

    • 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
    • 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程

    相关文章

      网友评论

        本文标题:有人问我如何用python实现字符串转日期?我用Jupyter

        本文链接:https://www.haomeiwen.com/subject/dfxneltx.html