如何使用Pandas处理数据

论坛 期权论坛 期权     
真格量化   2019-8-27 09:30   5626   0


Pandas 基于两种数据类型,series 和 dataframe。


series是一种一维的数据类型,其中的每个元素都有各自的标签。如果您之前看过关于Numpy的介绍,您可以把它当作一个由带标签的元素组成的 Numpy 数组。标签可以是数字或者字符。


dataframe 是一个二维的、表格型的数据结构。Pandas 的 dataframe 可以储存许多不同类型的数据,并且每个轴都有标签。您可以把它当作一个series的字典。




将数据导入 Pandas


比如我们已有csv格式的数据表格(比如英国降雨量的数据),我们可以很容易地利用Pandas导入数据:




# Reading a csv into Pandas.








df = pd.read_csv('uk_rain_2014.csv', header=0)




这里我们从 csv 文件里导入了数据,并储存在 dataframe 中。这一步非常简单,你只需要调用 read_csv 然后将文件的路径传进去就行了。header 关键字告诉 Pandas 哪些是数据的列名。如果没有列名的话就将它设定为 None 。Pandas 非常聪明,所以这个经常可以省略。




准备好要进行探索和分析的数据



现在数据已经导入到 Pandas 了,我们也许想看一眼数据来得到一些基本信息,以便在真正开始探索之前找到一些方向。


查看前 x 行的数据:


# Getting first x rows.


df.head(5)




我们只需要调用 head() 函数并且将想要查看的行数传入。
得到的结果如下:

如果我们可能还想知道数据集的一些基本的统计数据,在 Pandas 中,这个操作也很简单:


# Finding out basic statistical information on your dataset.


pd.options.display.float_format = '{:,.3f}'.format
# Limit output to 3 decimal places.


df.describe()
这将返回一张表,其中有诸如总数、均值、标准差之类的统计数据:

过滤数据


在 Pandas 中有多种方法可以实现提取我们想要的信息:


比如我们想提取一整列,使用列的标签可以非常简单地做到:


# Getting a column by label


df['rain_octsep']
当我们提取列的时候,会得到一个 series ,而不是 dataframe。记得我们前面提到过,我们可以把 dataframe 看作是一个 series 的字典,所以在按照列名抽取列的时候,我们就会得到一个 series,类似于在字典中根据key取得value。


我们可以方便地对一个列中的数据进行过滤,例如:



# Creating a series of booleans based on a conditional
df.rain_octsep < 1000
上面的代码将会返回一个由布尔值构成的 dataframe。True 表示在十月-九月降雨量小于 1000 mm,False 表示大于等于 1000 mm。


我们可以用这些条件表达式来过滤现有的 dataframe。
# Using a series of booleans to filter


df[df.rain_octsep < 1000]




这条代码只返回十月-九月降雨量小于 1000 mm 的记录:

索引



之前的部分展示了如何通过列操作来得到数据,但是 Pandas 的行也有标签。行标签可以是基于数字的或者是标签,而且获取行数据的方法也根据标签的类型各有不同。


如果我们的行标签是数字型的,我们可以通过 iloc 来引用:


# Getting a row via a numerical index


df.iloc[30]


iloc 只对数字型的标签有用。它会返回给定行的 series,行中的每一列都是返回 series 的一个元素。


iloc 只对数字型的标签有用。它会返回给定行的 series,行中的每一列都是返回 series 的一个元素。


也许我们的数据集中有年份或者时间的列,我们可能想通过这些年份或者年龄来引用行,这个时候我们就可以设置一个(或者多个)新的索引:


# Setting a new index from an existing column


df = df.set_index(['water_year'])


df.head(5)



上面的代码将 water_year 列设置为索引。注意,列的名字实际上是一个列表,虽然上面的例子中只有一个元素。如果我们想设置多个索引,只需要在列表中加入列的名字即可。

上例中我们设置的索引列中都是字符型数据(比如以字符串记录的年份),这意味着我们不能继续使用 iloc 来引用,那我们用什么呢?用 loc 。
# Getting a row via a label-based index


df.loc['2000/01']



和 iloc 一样,loc 会返回我们想引用的列,唯一一点不同就是此时我们使用的是基于字符串的引用,而不是基于数字的。


合并数据集




假设我们有两个相关联的数据集(比如英国的降水量和日本的降水量),我们想将它们放在一起比较或者合并它们。这在 Pandas 里也很简单:
# Merging two datasets together


rain_jpn= pd.read_csv('jpn_rain.csv')


rain_jpn.columns = ['year', 'jpn_rainfall']


uk_jpn_rain=df.merge(rain_jpn, on='year')


uk_jpn_rain.head(5)
首先我们需要通过 on 关键字来指定需要合并的列。通常你可以省略这个参数,Pandas 将会自动选择要合并的列。



如下图所示,两个数据集在年份这一类上合并了。jpn_rain 数据集只有年份和降雨量两列,通过年份列合并之后,jpn_rain 中只有降雨量那一列合并到了 UK_rain 数据集中。




保存数据集


在清洗、重塑、探索完数据之后,我们最后的数据集可能会发生很大改变,并且比最开始的时候更有用。我们可以保存处理之后的数据。


# Saving your data to a csv


df.to_csv('uk_rain.csv')




上面的代码将会保存我们的数据到 csv 文件以便下次使用。


真格量化对于很多数据,例如K线数据、持仓数据等,提供了直接用Dataframe格式查询的函数,我们掌握了Pandas之后可以更便捷地处理这些数据。










— — — — — — E N D — — — — — —



真格量化可访问:
https://quant.pobo.net.cn


真格量化微信公众号,长按关注:

遇到了技术问题?欢迎加入真格量化Python技术交流QQ群  726895887






往期文章:
Numpy处理tick级别数据技巧
真正赚钱的期权策略曲线是这样的
多品种历史波动率计算
如何实现全市场自动盯盘
AI是怎样看懂研报的
真格量化策略debug秘籍
真格量化对接实盘交易
常见高频交易策略简介

如何用撤单函数改进套利成交

Deque提高处理队列效率

策略编程选Python还是C++

如何用Python继承机制节约代码量

十大机器学习算法
如何调用策略附件数据

如何使用智能单

如何扫描全市场跨月价差

如何筛选策略最适合的品种

活用订单类型规避频繁撤单风险

真格量化回测撮合机制简介

如何调用外部数据

如何处理回测与实盘差别

如何利用趋势必然终结获利

常见量化策略介绍

期权交易“七宗罪”

波动率交易介绍

推高波动率的因素

波动率的预测之道

趋势交易面临挑战
如何构建知识图谱
机器学习就是现代统计学

AI技术在金融行业的应用

如何避免模型过拟合

低延迟交易介绍

架构设计中的编程范式

交易所视角下的套利指令撮合

距离概念与特征识别

气象风险与天气衍生品

设计量化策略的七个“大坑”

云计算在金融行业的应用

机器学习模型评估方法
真格量化制作期权HV-IV价差
另类数据介绍

TensorFlow中的Tensor是什么?

机器学习的经验之谈

用yfinance调用雅虎财经数据

容器技术如何改进交易系统
Python调用C++
如何选择数据库代理
统计套利揭秘

[h1]一个Call搅动市场?让我们温习一下波动率策略[/h1][h1]如何用真格量化设计持仓排名跟踪策略[/h1][h1]还不理解真格量化API设计?我们不妨参考一下CTP平台[/h1][h1]理解同步、异步、阻塞与非阻塞[/h1][h1]隐波相关系数和偏度——高维风险的守望者[/h1]Delta中性还不够?——看看如何设计Gamma中性期权策略

[h1]Python的多线程和多进程——从一个爬虫任务谈起[/h1]线程与进程的区别
皮尔逊相关系数与历史K线匹配

Python2和Python3的兼容写法
Python代码优化技巧

理解Python的上下文管理器

如何写出更好的Python代码?这是Python软件基金会的建议
评估程序化模型时我们容易忽视的指标

看看如何定位Python程序性能瓶颈

什么是Python的GIL

投资研究中的大数据分析趋势及应用

理解CTP中的回调函数

如何围绕隐含波动率设计期权交易策略                    
看看如何用Python进行英文文本的情感分析
算法交易的分类

Python编码的最佳实践总结

什么是波动率锥?如何用波动率锥设计期权策略?
期权的波动率策略与时间价值收集策略对比

期权用于套期保值和无风险套利

隐含波动率对期权策略的影响

卖出期权交易的风险管理原则和技巧
期权交易中的“大头针”风险
期权做市商策略简介

精细化您的交易——交易成本评估与交易执行策略
海外市场交易执行策略的实践
设计期权套期保值方案时应注意的问题
美式期权、欧式期权比较分析——定价与风险管理
构建您的AI时代武器库——常用的机器学习相关Python库
期权波动率“微笑曲线”之谜
运算任务愈发繁重,如何加速Python程序运行?
证券市场微观结构理论模型是什么

是瞬间成交还是漫长等待?——如何衡量市场流动性
波动率指数及其衍生品介绍

Python的异常处理技巧

Python中的阻塞、异步与协程

"香草"之外的更多选择——几种常见的路径依赖奇异期权
什么是CTP?——了解上期所CTP快速交易系统
了解季节性——以谷物和油籽为例
是前因还是后果?——在真格量化中进行格兰杰因果检验





















分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:870
帖子:180
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP