NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换

在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让一些开发者产生了困惑。本文将简单介绍这三种数据类型,并以金融市场数据为例,给出相关对象之间转换的具体示例。

 

ndarray数组对象

 

NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:

 

实际的数据;

 

描述这些数据的元数据。

 

大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据。NumPy数组一般是同质的(但有一种特殊的数组类型例外,它是异质的),即数组中的所有元素类型必须是一致的。这样有一个好处:如果我们知道数组中的元素均为同一类型,该数组所需的存储空间就很容易确定下来。

 

我们举一个简单的多维数组的例子。在这里,我们使用Numpy提供的arange函数来来方便的创建一维数组,其函数原型为arange([start,] stop[, step,], dtype=None)。可以指定起始值、结束值、步长及数据类型参数,这里步长参数为整数值。如果要使用非整数值的步长,可以考虑使用linespace函数。通过reshape()函数将一维数组转换为多维数组。

 

多维数组的操作也非常简单,可以参考list类型对数组进行访问、切片操作。比较重要的是可以通过shape属性获取数组的维数。


我们也可以通过多维数组来标识异构的数据类型,以股票价格数据为例,通过dtype类来定义数据类型对象stock, 其包括日期、开盘价、收盘价、最高价、最低价、成交量及股票编码信息:

不过在实际应用中,我们很少使用ndarray来定义异构的数据类型,而是使用pandas中的Series和DataFrame来操作。

 

ndarray的性能优势

 

一、内存块风格:

这是因为ndarray中的所有元素的类型都是相同的,而Python列表中的元素类型是任意的,所以ndarray在存储元素时内存可以连续,而python原生lis就t只能通过寻址方式找到下一个元素,这虽然也导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。

 

二、ndarray支持并行化运算(向量化运算)。

 

三、Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。

 

 

Series对象

 

从一般意义上来讲, Series 可以简单地被认为是一维的数组。Series 和一维数组最主要的区别在于 Series 类型具有索引( index )。Series支持从列表和字典创建,这里仅举以列表创建的例子:

输出结果为:

我们还可以将Series转换为ndarray类型:

或者使用.values。

 

 

DataFrame对象

 

DataFrame 是将数个 Series 按列合并而成的二维数据结构,每一列单独取出来是一个 Series ,这和SQL数据库中取出的数据是很类似的。所以,按列对一个 DataFrame 进行处理更为方便,开发者在编程时注意培养按列构建数据的思维。DataFrame 的优势在于可以方便地处理不同类型的列,因此,就不要考虑如何对一个全是浮点数的 DataFrame 求逆之类的问题了,处理这种问题还是把数据存成NumPy的 matrix 类型比较便利一些。


我们仍用一个股票价格数据的例子,创建DataFrame对象,这里把日期提取出来作为index,同时指定了列名。

 

 

这里,我们展示了4种方法将DataFrame转化为ndarray类型的方法。as_matrix()方法可以指定获取的列;values属性将使用所有的列转换为ndarray对象,等同于无参数的as_matrix();array()接受将DataFrame对象作为参数创建ndarray对象。to_numpy()也是将DataFrame转为ndarray对象。

 

— — — — — — 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++

如何选择数据库代理

统计套利揭秘

一个Call搅动市场?让我们温习一下波动率策略

如何用真格量化设计持仓排名跟踪策略

还不理解真格量化API设计?我们不妨参考一下CTP平台

理解同步、异步、阻塞与非阻塞

隐波相关系数和偏度——高维风险的守望者

Delta中性还不够?——看看如何设计Gamma中性期权策略

Python的多线程和多进程——从一个爬虫任务谈起

线程与进程的区别
皮尔逊相关系数与历史K线匹配

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

理解Python的上下文管理器

如何写出更好的Python代码?这是Python软件基金会的建议

评估程序化模型时我们容易忽视的指标

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

什么是Python的GIL

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

理解CTP中的回调函数

如何围绕隐含波动率设计期权交易策略                    

看看如何用Python进行英文文本的情感分析

算法交易的分类

Python编码的最佳实践总结

什么是波动率锥?如何用波动率锥设计期权策略?

期权的波动率策略与时间价值收集策略对比

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

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

卖出期权交易的风险管理原则和技巧

期权交易中的“大头针”风险

期权做市商策略简介

精细化您的交易——交易成本评估与交易执行策略

海外市场交易执行策略的实践

设计期权套期保值方案时应注意的问题

美式期权、欧式期权比较分析——定价与风险管理

构建您的AI时代武器库——常用的机器学习相关Python库

期权波动率“微笑曲线”之谜

运算任务愈发繁重,如何加速Python程序运行?

证券市场微观结构理论模型是什么

是瞬间成交还是漫长等待?——如何衡量市场流动性

波动率指数及其衍生品介绍

Python的异常处理技巧

Python中的阻塞、异步与协程

"香草"之外的更多选择——几种常见的路径依赖奇异期权

什么是CTP?——了解上期所CTP快速交易系统

了解季节性——以谷物和油籽为例

是前因还是后果?——在真格量化中进行格兰杰因果检验

Python导入模块的技巧

Python程序员常犯的十个错误

搜索数据泄露天机?——舆情指数与期货行情关联性分析思路

机器学习常见算法分类汇总

如何使用Data Pipeline 自动化数据处理工作?

CTP API的委托介绍和在真格量化中的订单流控制

高频交易对市场的影响

期货行情及其组织形式——以上期所为例

理解并行与并发

郑商所和大商所套利指令及在真格量化的实现

机器学习用于金融市场预测面临的挑战

高频交易中风险控制的常用措施

查询结果偏离预期?来了解CTP的报单函数及委托状态查询

Python中的ftplib模块

理解真格量化的Python编程范式

需要处理大量市场数据?来了解一下MySQL、HBase、ES的特点和应用场景

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 pandas 库将多个 numpy.ndarray 转换成一个 dataframe。具体的做法是,先将每个 numpy.ndarray 转换成一个 pandasSeries,再将这些 Series 合并成一个 dataframe。 下面是示例代码: ```python import pandas as pd import numpy as np # 假设有两个 numpy.ndarray,分别为 arr1 和 arr2 arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) # 将每个 ndarray 转换成一个 Series s1 = pd.Series(arr1) s2 = pd.Series(arr2) # 将两个 Series 合并成一个 dataframe df = pd.concat([s1, s2], axis=1) # 打印输出结果 print(df) ``` 输出结果为: ``` 0 1 0 1 4 1 2 5 2 3 6 ``` ### 回答2: 要将多个numpy.ndarray转换成一个dataframe,我们可以使用pandasDataframe函数来实现。 首先,我们需要导入numpypandas库: ```python import numpy as np import pandas as pd ``` 接下来,假设我们有两个numpy数组arr1和arr2,它们的形状为(5, 3)和(5, 2)。我们可以使用numpy的vstack函数将这两个数组垂直堆叠起来,形成一个新的numpy数组: ```python new_arr = np.vstack((arr1, arr2)) ``` 然后,我们可以使用pandasDataframe函数将这个新的numpy数组转换成一个dataframe: ```python df = pd.DataFrame(new_arr) ``` 最后,我们可以通过打印dataframe来验证转换是否成功: ```python print(df) ``` 完整代码如下: ```python import numpy as np import pandas as pd arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]) arr2 = np.array([[16, 17], [18, 19], [20, 21], [22, 23], [24, 25]]) new_arr = np.vstack((arr1, arr2)) df = pd.DataFrame(new_arr) print(df) ``` 运行代码后,我们将得到一个包含8行5列的dataframe,其前5行来自arr1,后3行来自arr2。 ### 回答3: 要将多个numpy.ndarray转换成一个dataframe,可以使用pandasDataFrame函数。首先,将每个ndarray转换pandasSeries对象,然后将Series对象放入一个字典。最后,通过将字典作为参数传递给DataFrame函数,可以将所有的Series对象合并为一个DataFrame。 以下是一个示例代码,假设有两个ndarray数组arr1和arr2: import pandas as pd import numpy as np arr1 = np.array([1, 2, 3, 4, 5]) arr2 = np.array([6, 7, 8, 9, 10]) # 将每个ndarray转换Series对象 series1 = pd.Series(arr1) series2 = pd.Series(arr2) # 创建一个字典,将Series对象放入其 data = {'arr1': series1, 'arr2': series2} # 通过字典创建一个DataFrame df = pd.DataFrame(data) 这样,就将arr1和arr2两个ndarray转换为了一个DataFrame对象df。DataFrame将每个ndarray视为一列,列名分别为arr1和arr2。可以通过df来访问和操作这些数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值