在jupyter中利用pandas处理时间序列

前言

目录

1.Jupyter Notebook哪里舒服了

2.Pandas常用的时间处理操作

1.Jupyter Notebook哪里舒服了

1.1 一些优点

  1. 是一个交互式笔记本,网页版的IDE,便捷持久化输出和分享,支持多种语言如R\Spark等
  2. 不需要用vim在服务器上编码了

jupyter可以部署到服务器,通过设置的密码登录
或者通过ssh建立一个本机和服务器的端口映射,端口映射命令ssh -N -f -L localhost:8889:localhost:8888 remote_name
在本地浏览器可以进行:上传文件,下载导出为.html .md .pdf.py等,运行python,bash命令,交互式的可视化图像

  1. 运行模式
    • 一个文件由多个cell组成,每个cell是一个可编辑执行和展示的小单元
    • 变量,函数,包 等都保存在内存中,不需要重复运行,可实时查看
    • 输出结果也会保留再页面上,便于预处理数据和展示,相互不影响
    • 最后一行会直接输出结果,免去print
  2. plot出来的图片会保存在页面内,甚至可以进行选取平移等操作,支持markdown,支持github渲染,让分享更快捷
  3. 有许多扩展插件:Configurable nbextensions(单独安装):
    • Variable Inspector:实时查看变量
    • Code prettify:格式化代码
    • Table of Contents:显示md的目录结构,类似书签
    • 一键隐藏代码或者输出结果等等
    • 冷冻部分代码不运行不可更改
  4. 许多魔法命令,如
    • %magic:查看所有魔法命令
    • %%timeit : 测试整个单元中代码的执行时间

!+linux命令 就可以直接运行,还用什么shell
?pd.qcut() 显示相关函数的说明文档,附带sample
%run ./note.ipynb 可以直接运行其他的notebook,其渲染的图片也会显示在当前的shell中
%load ./hello_world.py 载入py文件的代码到当前cell里
%store data 将在不同的notebook间共享变量,输入%store -r data 即可加载
%%writefile pythoncode.py 可以把当前cell的内容保存到外部文件中区,%%pycat 可以查看
%prun some_useless_slow_function() 显示每个内部函数的耗时情况
LaTex公式:用两个$$包含住P(A \mid B) = \frac{P(B \mid A) , P(A)}{P(B)}即可
%%bash %%ruby... 在不同cell开头加上声明,就可以运行不同内核的代码了
conda install -c r r-essentials 安装r等不同的内核命令

1.2 Notebook 页面介绍及使用

  • 工具栏:
    从左到右依次是 Cell的常规操作(移动,中断,重启);Cell类型(md还是运行的代码);隐藏当前cell的代码;全部隐藏;冰冻cell使其不能run或者change;监控变量;字的大小;书签展示;美化代码等

    image.png

  • 目录 这个插件我觉得非常的有用,值得推荐!
    你可以先用markdown写一下算法的大致流程,然后一个一个步骤的去完成,同时也会清晰的看到自己目前正在编写第几个步骤(黄色标识),点击即可跳转,想必都体验过一行一行找代码的痛苦吧

    image.png

  • 主页面以及Cell

cell就是一个命令窗口,里面可以放markdown文本或者要执行的代码
第一个是代码块,运行一次,结果很持久;后面是渲染的一个图,分享给别人打开就能看到图,不需要再次运行

image.png

1.3 Tips:

  • 两种状态:命令模式(Command Mode)与编辑模式(Edit Mode),编辑下可以ctrl-enter运行cell内的代码,或者Esc切换到命令状态;shitf-enter运行当前代码并移动到下一个cell
  • esc后敲
    • s保存(可以回滚到最近一个保存的checkpoint);
    • m将cell变成一个markdown;
    • 数字变成md的Heading级别;
    • a在上方插入一个cell;
    • b在下方插入一个cell;
    • z回滚最近的操作;
    • l展示行数
  • 创建的时候可以选择不同的kernel,比如py2,py3,R,spark等

2. Pandas常用的时间处理操作

  • 基础操作
# 生成
pd.DataFrame([1,2,3,4])
# 读取文件,json sql html...
pd.read_csv('a.csv')
# 写入文件
df.to_csv()
# 合并
pd.merge()
pd.concat()
# 移除重复数据(去重)
df.duplicated()
# df.map() df.apply() 可以将操作应用到一列或者每一个元素
# 选取
df[df['column'] == -1] = 1
  • 更多内容看 十分钟了解pandas
  • 时间序列的一些操作
  • 时间戳->日期 + 时区转换
    # 时区问题
    # 单个字符串 时间戳->日期的转换
    pd.to_datetime(df['time_stamp'][1],unit='ms',utc=True).tz_convert('Asia/Shanghai')
    pd.to_datetime(1554970740000,unit='ms').tz_localize('UTC').tz_convert('Asia/Shanghai')
    Timestamp('2019-04-11 16:19:00+0800', tz='Asia/Shanghai')
    '''
    utc是协调世界时,时区是以UTC的偏移量的形式表示的,但是注意设置utc=True,是让pandas对象具有时区性质,对于一列进行转换的,会造成转换错误
    unit='ms' 设置粒度是到毫秒级别的
    上面的输出就是:
    Timestamp('2019-04-11 16:19:00+0800', tz='Asia/Shanghai')
    '''
    # 列转换 2.7需要加dt,localize  
    df = pd.DataFrame([1554970740000, 1554970800000, 1554970860000],columns = ['time_stamp'])
    pd.to_datetime(df['time_stamp'],unit='ms').dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai')#先赋予标准时区,再转换到东八区
    pd.to_datetime(df['time_stamp'],unit = 'ms').astype('datetime64[ns, Asia/Shanghai]')
    '''
    上面的正确输出是这样子:
        2019-04-11 16:19:00+08:00
        2019-04-11 16:20:00+08:00
        2019-04-11 16:21:00+08:00
    错误的是这样子:
    pd.to_datetime(df['time_stamp'],unit = 'ms', utc=True)
        2019-04-11 08:19:00
        2019-04-11 08:20:00
        2019-04-11 08:21:00
    pd.to_datetime(df['time_stamp'],unit = 'ms', utc=True).dt.tz_localize('Asia/Shanghai')
        2019-04-11 08:19:00+08:00
        2019-04-11 08:20:00+08:00
        2019-04-11 08:21:00+08:00
        
    '''
    # 格式化 单个字符串没有dt
    pd.to_datetime(df['time_stamp'],unit = 'ms').astype('datetime64[ns, Asia/Shanghai]').dt.strftime('%Y-%m-%d %H:%M')
    # 索引设置为时间datetime后,可以这么操作:
    df['2019-01']
    df['2019-01-24 01:41':'2019-01-24 01:43']
    time_stamp  value  
    2019-01-24 01:41:00+08:00   1548294060000 
    2019-01-24 01:42:00+08:00   1548294120000 
    2019-01-24 01:43:00+08:00   1548294180000 
    
    • 改变时间间隔
    df['time'].asfreq('45Min', method='pad')
    
    • 字符生成日期格式
    pd.Timestamp('2012-05-01')
    Timestamp('2012-05-01 00:00:00')
    
    • 时间重采样,粒度
    # index 需要设置为timedate类型: 
    df.index = pd.to_datetime()
    df.resample('24H',how='count')
    
    • 时间的生成
    # 每个月末
    pd.date_range(start, end, freq='BM')
    # 每隔一周
    pd.date_range(start, end, freq='W')
    # end 往前数
    pd.bdate_range(end=end, periods=20)
    # start 往后数
    pd.bdate_range(start=start, periods=20)
    
    • 选取时间-isin:
    df['date'] = pd.date_range('2017-1-1', periods=30, freq='D')
    in_range_df = df[df["date"].isin(pd.date_range("2017-01-15", "2017-01-20"))]
    ...
    
    • 选取时间-between_time('23:00','00:00')
    back_time.between_time('23:00','00:00')
    out:
    2018-12-19 23:29:00+08:00    1545262140000
    2018-12-21 23:55:00+08:00    1545436500000
    
    • 比较
    # 直接比较 datetime64 类型的column
    df_time['date']>'2018-12-19'
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容