numpy中的ndarray与pandas的Series和DataFrame之间的相互转换
来源:互联网 发布:select两张表所有数据 编辑:程序博客网 时间:2024/06/05 23:56
简介
在数据分析中,经常涉及numpy中的ndarray对象与pandas的Series和DataFrame对象之间的转换,让大家产生困惑。本文将简单介绍这三种数据类型,并以股票信息为例,给出相关对象之间转换的具体示例。ndarray数组对象
NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:- 实际的数据;
- 描述这些数据的元数据。
我们举一个简单的多维数组的例子。在这里,我们使用Numpy提供的arange函数来来方便的创建一维数组,其函数原型为arange([start,] stop[, step,], dtype=None)。可以指定起始值、结束值、步长及数据类型参数,这里步长参数为整数值。如果要使用非整数值的步长,可以考虑使用linespace函数。通过reshape()函数将一维数组转换为多维数组。
>>> import numpy as np>>> a = np.arange(10).reshape(2,5)>>> print a[[0 1 2 3 4] [5 6 7 8 9]]>>> type(a)<type 'numpy.ndarray'>>>> a[0,1]1>>> a[0][1]1>>> a[:, ::2]array([[0, 2, 4], [5, 7, 9]])>>> a[0]array([0, 1, 2, 3, 4])>>> a.shape(2L, 5L)>>> a.dtypedtype('int32')>>> a.dtype.itemsize4多维数组的操作也非常简单,可以参考list类型对数组进行访问、切片操作。比较重要的是可以通过shape属性获取数组的维数。
我们也可以通过多维数组来标识异构的数据类型,以股票数据为例,通过dtype类来定义数据类型对象stock, 其包括日期、开盘价、收盘价、最高价、最低价、成交量及股票编码信息:
from numpy import *if __name__ == '__main__': stock = dtype([('date', str_, 10), ('open', float32), ('close', float32), ('high', float32), ('low', float32), ('volume', float32), ('code', float32)]) data = array([("2017-10-18", 11.53, 11.69, 11.70, 11.51, 871365.0, "000001"), ("2017-10-19", 11.64, 11.63, 11.72, 11.57, 722764.0, "000001"), ("2017-10-20", 11.59, 11.48, 11.59, 11.41, 461808.0, "000001"), ("2017-10-23", 11.39, 11.19, 11.40, 11.15, 1074465.0, "000001")], dtype=stock) print type(data) print data显示结果:
<type 'numpy.ndarray'>[ ('2017-10-18', 11.52999973, 11.68999958, 11.69999981, 11.51000023, 871365., 1.) ('2017-10-19', 11.64000034, 11.63000011, 11.72000027, 11.56999969, 722764., 1.) ('2017-10-20', 11.59000015, 11.47999954, 11.59000015, 11.40999985, 461808., 1.) ('2017-10-23', 11.39000034, 11.18999958, 11.39999962, 11.14999962, 1074465., 1.)]在实际应用中,我们很少使用ndarray来定义异构的数据类型,而是使用pandas中的Series和DataFrame来操作。
Series对象
从一般意义上来讲, Series 可以简单地被认为是一维的数组。 Series 和一维数组最主要的区别在于 Series 类型具有索引( index )。Series支持从列表和字典创建,这里仅举以列表创建的例子:
from pandas import Seriesif __name__ == '__main__': data = [ ["2017-10-18", 11.53, 11.69, 11.70, 11.51, 871365.0, 000001], ["2017-10-19", 11.64, 11.63, 11.72, 11.57, 722764.0, 000001], ["2017-10-20", 11.59, 11.48, 11.59, 11.41, 461808.0, 000001], ["2017-10-23", 11.39, 11.19, 11.40, 11.15, 1074465.0, 000001]] series = Series(data, index=['a', 'b', 'c', 'd']) print series #将Series转换为ndarray类型 arr = series.as_matrix()可以调用as_matrix()将其转换为ndarray类型的对象。
DataFrame对象
DataFrame 是将数个 Series 按列合并而成的二维数据结构,每一列单独取出来是一个 Series ,这和SQL数据库中取出的数据是很类似的。所以,按列对一个 DataFrame 进行处理更为方便,用户在编程时注意培养按列构建数据的思
维。 DataFrame 的优势在于可以方便地处理不同类型的列,因此,就不要考虑如何对一个全是浮点数的 DataFrame 求逆之类的问题了,处理这种问题还是把数据存成NumPy的 matrix 类型比较便利一些。
我们仍平安银行的例子,创建DataFrame对象,这里把日期提取出来作为index,同时指定了列名。
from pandas import Series, DataFramefrom numpy import arrayif __name__ == '__main__': data = [ [11.53, 11.69, 11.70, 11.51, 871365.0, 000001], [11.64, 11.63, 11.72, 11.57, 722764.0, 000001], [11.59, 11.48, 11.59, 11.41, 461808.0, 000001], [11.39, 11.19, 11.40, 11.15, 1074465.0, 000001]] df = DataFrame(data, index=["2017-10-18", "2017-10-19", "2017-10-20", "2017-10-23"], columns=["open", "close", "high", "low", "volume", "code"]) print df print df.as_matrix(['open', 'close']) print df.values print array(df)这里,我们展示了3种方法将DataFrame获取ndarray类型的方法。as_matrix()方法可以指定获取的列;values属性将使用所有的列转换为ndarray对象,等同与无参数的as_matrix();array()接受将DataFrame对象作为参数创建ndarray对象。
阅读全文
0 0
- numpy中的ndarray与pandas的Series和DataFrame之间的相互转换
- numpy的ndarray与pandas的series和dataframe之间互转
- numpy与pandas的数据结构互转:ndarray、series、dataframe
- numpy与pandas的数据结构互转:ndarray、series、dataframe
- pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换
- python下DataFrame, Series, ndarray, list, dict, tuple的相互转换
- python-pandas-Series和DataFrame的基本功能
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主
- spark: RDD与DataFrame之间的相互转换
- Python pandas基础: Series和DataFrame的简单介绍
- python pandas 对series和dataframe的重置索引reindex
- Pandas两种主要的数据结构--Series和DataFrame
- Python Pandas常用数据结构Series和DataFrame的相关操作
- pandas基础: Series和DataFrame的简单介绍
- pandas的数据类型之Series,DataFrame
- pandas基础:Series、和NumPy里的random.x()
- Pandas入门---Series和DataFrame
- numpy中的ndarray与array的区别、不同
- LINQ体验系列文章导航
- Linux用户管理
- java实现树形展示
- 谈PHP中信息加密技术
- weiphp2.0:关于OneThink后台添加密码重置的功能
- numpy中的ndarray与pandas的Series和DataFrame之间的相互转换
- codeforces 888C K-Dominant Character
- 树的应用之相同树的判断
- 自定义包及模块的导入
- Unity中物体添加刚体属性后,运行出现掉落情况如何解决?
- Dubbo 疯狂更新!阿里开源要搞大事情?
- shell脚本监控进程
- Linux基础命令(三)之top详解
- JAVA中获取文件MD5值的四种方法