python list和series转换dataframe_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对象。

你可能感兴趣的:(python)