女主宣言

Pandas是一个python的开源库,它基于Numpy,提供了多种高性能且易于使用的数据结构。Pandas最初被用作金融数据分析工具而开发,由于它有着强大的功能,目前广泛应用于数据分析、机器学习以及量化投资等。下面来跟随作者一起认识下Pandas吧!

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

1

如何开始

Pandas安装方式十分简单,如果使用Anaconda,Anaconda默认就已经为我们安装好了Pandas,直接拿来用就可以了,推荐使用这种方式。

如果不用Anaconda,只需执行如下命令即可:

pip install pandas

像其他python库一样,使用之前需要导入,通常采用如下方式:

import pandas as pd

2

Pandas数据结构

Pandas的数据结构包括 SeriesDataFrame以及 Panel,这些数据结构基于 Numpy,因此效率很高。其中 DataFrame最为常用,是Pandas最主要的数据结构。所有Pandas数据结构都是值可变的,除 Series外都是大小(Size)可变的, Series大小不可变。

Series

Series是一维的类似的数组的对象,它包含一个数组的数据(任意NumPy的数据类型)和一个与数组关联的索引 。

>>> import pandas as pd
>>> import numpy as np
>>> s = pd.Series(np.random.randn(4))
>>> s
0    0.102780
1    1.523001
2    1.770067
3    0.437553
dtype: float64

可以看到Pandas默认为我们生成了索引,它的结构如下表所示:

0 1 2 3
0.102780 1.523001 1.770067 0.437553

我们也可以使用 index关键字为其指定索引:

>>> s = pd.Series(np.random.randn(4), index=['a', 'b', 'c', 'd'])
>>> s
a   -0.316668
b    0.083363
c   -0.520227
d   -1.024034
dtype: float64

DataFrame

DataFrame是二维的、类似表格的对象,是使用最为广泛的Pandas数据结构。DataFrame有行和列的索引,访问便捷。它可以被看作是Series的字典:

>>> data = {'name': ['张三', '李四', '王五'],
...         'gender': ['M', 'F', 'M'],
...         'height': [174, 160, 185],
...         'weight': [80, 48, 70]}
>>> frame = pd.DataFrame(data)
>>> frame  name gender  height  weight
0   张三      M     174      80
1   李四      F     160      48
2   王五      M     185      70

结构如下表所示

name gender height weight
0 张三 M 174 80
1 李四 F 160 48
2 王五 M 185 70

一方面,我们可以使用 columns关键字指定DataFrame列的顺序,DataFrame的列将会严格按照 columns所指定的顺序排列;另一方面,与Series相同,我们可以使用 index关键字为其指定索引:

>>> frame2 = pd.DataFrame(data, columns=['name', 'gender', 'weight'],
...     index=['one', 'two', 'three'])
>>>
>>> frame2 name gender  weight
one     张三      M      80
two     李四      F      48
three   王五      M      70

需要注意的是,DataFrame的同一列允许有不同类型的值(数字,字符串,布尔等),这便意味着:我们可以将 王五weight设置为 F

3

数据访问和遍历

DataFrame支持按下标访问:

>>> frame2.iloc[0]
name      张三
gender     M
weight    80
Name: one, dtype: object
>>> frame2.iloc[0]['weight']
80

也支持按索引访问:

>>> frame2.loc['two']
name      李四
gender     F
weight    48
Name: two, dtype: object
>>> frame2.loc['two']['name']
'李四'

因此,DataFrame也支持如下两种遍历方式:

>>> for i in range(0, len(frame2)):
...     print(frame2.iloc[i])
*** 输出结果略 ***
>>> for index, row in frame2.iterrows():
...     print(row)
*** 输出结果略 ***

4

添加和删除列

如果我们想增加一列,也非常方便,如计算BMI指数:

>>> frame['BMI'] = frame['weight']/(frame['height']*frame['height']/10000)
>>> frame  name gender  height  weight        BMI
0   张三      M     174      80  26.423570
1   李四      F     160      48  18.750000
2   王五      M     185      70  20.452885

仅需一行代码而无需遍历。

删除列:

>>> del frame2['gender']
>>> frame2 name  weight
one     张三      80
two     李四      48
three   王五      70

5

添加和删除行

添加行

>>> frame3 = pd.DataFrame([['小红', 46], ['小明', 68]], columns = ['name', 'weight'], index=['four', 'five'])
>>> frame4 = frame2.append(frame3)
>>> frame4 name  weight
one     张三      80
two     李四      48
three   王五      70
four    小红      46
five    小明      68

删除行

>>> frame4.drop('four')  name  weight
one     张三      80
two     李四      48
three   王五      70
five    小明      68

6

数据筛选

  • 按下标取出前两条记录

>>> frame[:2] name gender  height  weight       BMI
0   张三      M     174      80  26.42357
1   李四      F     160      48  18.75000
  • 按其他条件筛选

如找到BMI>20的记录:

>>> mask = (frame['BMI'] > 20)
>>> frame.loc[mask]    name gender  height  weight        BMI
0   张三      M     174      80  26.423570
2   王五      M     185      70  20.452885

DataFrame还支持许多其他的操作,篇幅有限,在此不一一展开。

7

Panel

Panel是三维的数据结构,可以看作是DataFrame的字典,这种数据结构使用很少,此处略过不提。

Pandas实战

学习技术是为了更好的工作和生活,抛开应用,技术也就失去了存在的意义。本文开篇中提到,Pandas作为数据分析工具的一个重要应用场景是量化投资,在此我想分享一下使用pandas的一个场景:

我想筛选出A股市场中过去60个交易日表现好的那些股票。关于表现好,也许每个人都有自己的看法,我的标准如下

  • 涨幅够大,区间累计涨幅达60%以上

  • 回撤小,区间内任意单个交易日跌幅不超过7%,包括高开低走7%(套人的不算好股票);区间内任意连续两个交易日累计跌幅不超过10%,包括连续两个交易日高开低走10%

我使用的数据源是TuShare,它提供了A股复权日线图,不过它没有提供复权数据的每日涨跌幅,所以我们需要对他进行处理:

>>> import tushare as ts
>>> import talib as tl
>>> data = ts.get_k_data('300573', autype='qfq')
>>> data['p_change'] = tl.ROC(data['close'], 1)

此处使用了TALib,一个开源的金融数据分析工具。

完成初步的数据处理之后,我们就可以运行筛选条件了,截取代码片段如下:

threshold = 60
if len(data) < threshold:    return False
data = data.tail(n=threshold)
ratio_increase = (data.iloc[-1]['close'] - data.iloc[0]['close']) / data.iloc[0]['close']
if ratio_increase < 0.6: return False
for i in range(1, len(data)):   if data.iloc[i - 1]['p_change'] < -7 \ or (data.iloc[i]['close'] - data.iloc[i]['open'])/data.iloc[i]['open'] * 100 < -7 \    or data.iloc[i - 1]['p_change'] + data.iloc[i]['p_change'] < -10 \  or (data.iloc[i]['close'] - data.iloc[i - 1]['open']) / data.iloc[i - 1]['open'] * 100 < -10:  return False
return True

最后的结果如下:

[('603986', '兆易创新'), ('603882', '金域医学'), ('603501', '韦尔股份'), ('300782', '卓胜微'), ('300622', '博士眼镜'), ('300502', '新易盛'), ('300492', '山鼎设计'), ('300433', '蓝思科技'), ('300223', '北京君正'), ('002917', '金奥博'), ('002892', '科力尔'), ('002876', '三利谱'), ('002850', '科达利'), ('002819', '东方中科'), ('002600', '领益智造'), ('002241', '歌尔股份'), ('000049', '德赛电池')]

可以看到其中科技股独领风骚,谁让我们大A是科技牛呢?

笔者的自动选股程序已经开源:Sequoia,欢迎Star,欢迎添砖加瓦。

360云计算

由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

数据分析利器之Pandas相关推荐

  1. ML之FE:pandas库中数据分析利器之groupby分组函数、agg聚合函数、同时使用groupby与agg函数组合案例之详细攻略

    ML之FE:pandas库中数据分析利器之groupby分组函数.agg聚合函数.同时使用groupby与agg函数组合案例之详细攻略 目录 pandas库中数据分析利器之groupby分组函数.ag ...

  2. 【手把手教你】玩转Python金融量化利器之Pandas

    前言 "手把手教你"系列将为Python初学者一一介绍Python在量化金融中运用最广泛的几个库(Library): NumPy(数组.线性代数).SciPy(统计).pandas ...

  3. 数据分析利器之Excel功能篇

    数据说·实操季 先相信自己,然后别人才会相信你.   --罗曼·罗兰 导读:今天我们要介绍的关于Excel功能的系列内容,在数据分析行业里面的地位是举足轻重的.从使用范围来看,微软办公软件Office ...

  4. 数据分析利器之hive优化十大原则

    转载:http://www.cnblogs.com/sandbank/p/6408762.html hive之于数据民工,就如同锄头之于农民伯伯.hive用的好,才能从地里(数据库)里挖出更多的数据来 ...

  5. 大数据分析利器之Power BI,你是否已经掌握?

  6. python利器怎么编程-Python任务调度利器之APScheduler详解

    任务调度应用场景 所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等.在现实项目中经常出现它们的身影:特别是数据类项目,比如实时统计每5分钟网站的访问量,就需要每5分钟定时从日志数据分析访问 ...

  7. 【量化】股市技术分析利器之TA-Lib(二)

    作者:未来大佬 来源: 恒生LIGHT云社区 上篇文章 [量化]股市技术分析利器之TA-Lib(一) ,主要介绍了Ta-lib的基础知识与绘制布林线,本文将着重介绍TA-Lib中强大的价格转换.周期指 ...

  8. Python数据分析入门之pandas基础总结

    Pandas--"大熊猫"基础 Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.r ...

  9. python利器的使用-图文详解python开发利器之ulipad的使用实践

    Ulipad是一个国人limodou编写的专业Python编辑器,它基于wxpython开发的GUI(图形化界面).下面这篇文章主要介绍了python开发利器之ulipad的使用实践,文中介绍的非常详 ...

最新文章

  1. mysql批量创建数据库 导数据
  2. 四则运算表达式求值(栈的应用)
  3. 迅雷的user-agent
  4. C++智能指针 shared_ptr、weak_ptr
  5. 在wine里安装了IE6
  6. python源码提取_Python|第一个python程序(获取音乐下载地址,附源码)
  7. Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题
  8. directx修复工具win7_win7提示explorer.exe应用程序错误的解决方法
  9. linux下RTNETLINK answers: File exists的解决方案
  10. qchart能绘制三维_通图GIS | 用多种体展示方案适配复杂三维场景分析、表达
  11. UIScrollView与分页的联合使用
  12. C++11常见编译与链接错误解决总结
  13. python中while用法
  14. 计算机网络ip进制转换方法,IP地址与二进制之间的转换
  15. 护理和母乳喂养文胸的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. Matplotlib双y轴+调整图例位置
  17. python基础3-----list/dict/set/tuple
  18. 6.1_[Java 数组]-数组与二重循环和鸡兔同笼及冒泡排序
  19. 【XSY2498】贪吃蛇(bfs/dfs)
  20. Linux 磁盘I/O是怎么工作的

热门文章

  1. (3)插入排序之一 直接插入排序
  2. MSDN Visual系列:在MOSS中创建一个BDC实体
  3. DOM全屏Api requestFullscreen
  4. python-玉米(小米)商城作业
  5. php 输出 jsonp
  6. 用reposync 同步YUM源到本地,搭建本地YUM源服务器
  7. android 关于listview scrollview 底部 控件无法显示的两个解决方案
  8. 公司的Java框架应具备的通用功能
  9. 苏格拉底与失恋者的对话————最经典的失恋哲理 ...
  10. Linux命令——cut命令学习