Pandas 10min入门(官方文档注释版一)
接触Pandas有一段时间,但一直未能系统的进行过总结。最近开始接触机器学习,用pandas的地方颇多,因此专门重新整理以下。
首先,Pandas 作为Python处理矩阵类数据的王牌利器,其官方文档相当丰富而且详细,为了方便学习Pandas官方竟然给了一个10min中的入门教程,链接如下:http://pandas.pydata.org/pandas-docs/stable/10min.html 。
教程很详细,但是对于入门者而言,个人感觉还是缺少一些说明。因此特意增加了一些相关的注释和说明。详细内容如下:
- 第一步:加载Pandas 库
import pandas as pd import numpy as np import matplotlib.pyplot as plt
上述为加载的pandas 库,由于pandas中的维度元素主要是numpy,所以通常也将numpy一起加载,而matplotlib是一个画图的工具,为了方便后面展示需要,因此也加载了一份。这里需要注意的是3个加载的库都使用了缩写的简称pd,np,plt缩写的名字虽无正式约定,但是已经约定俗成,因此建议保留这种缩写的方式。
- 创建一个Series对象
官方的定义:Series
is a one-dimensional labeled array capable of holding any data type (integers, strings, floating point numbers, Python objects, etc.). The axis labels are collectively referred to as the index.
Series 是一个一维带标记的数组,它由一组数据(integers, strings, floating point numbers, Python objects, etc.)以及一组与之相关的索引组成。可以将Series看成是一个定长的有序字典,索引是到数据值的一个映射。
最长用的创建Series的方式:
s = pd.Series(data, index=index)
data 可以是任意的一种Numpy类型:
- a Python dict
- an ndarray
- a scalar value (like 5)
Index是一组索引标签。如下所示:
>>> import pandas as pd >>> import numpy as np >>> import matplotlib.pyplot as plt >>> s = pd.Series([1,3,5,np.nan,6,8]) >>> s 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64
上文没有使用index,因此自动生成从0开始的index(注意:index并非只能是数值,也可以是字符串等值,但是需要自己定义).
代码中的np.nan是代表空值的含义。
- 通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
>>> dates = pd.date_range('20130101', periods=6) >>> dates DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D') >>> df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) >>> df A B C D 2013-01-01 -1.456158 -0.017003 0.043328 0.314046 2013-01-02 -0.443706 -1.127461 0.122404 0.358885 2013-01-03 -1.004546 -0.029662 1.321131 -1.048084 2013-01-04 -0.103759 0.287075 -1.101669 -0.367991 2013-01-05 -0.379868 1.898191 3.520912 -0.384936 2013-01-06 -1.792955 1.118273 -0.279532 0.281036
DataFrame结构是一个二维(可以通过其他方法实现多维)的表格型数据结构,它含有一组有序的列,每列可以是不同的值类型。其既有行索引又又列索引,其可以被看作是由Series组成的字典(公用同一个索引)。
其创建时的参数含义具体如下:
index 相当于是一个行索引,columns相当于一个列索引。上述代码中index 通过 dates = pd.date_range('20130101', periods=6) 定义,列索引通过 columns=list('ABCD') 显示定义。
下面举的例子在官方文档中没有,但个人觉得为了更好地理解下一个官方的例子,有必要先了解下以下这个例子:
在前面讲述Series定义的时候,笔者提及“可以将Series看成是一个定长的有序字典”,在关于“Series”的例子中,我们传入的都市一个ndarray数组,但data的类型也可以是dict字典,如果data是一个字典的话,那么字典的key值也就默认就是index值,如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
>>> sdata = {"name":"lst","age":34,"company":"icpdas"} >>> sd = pd.Series(sdata) >>> sd age 34 company icpdas name lst dtype: object >>>
了解了刚才的例子,我们在看下面通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame的例子:
>>> df2 = pd.DataFrame({ 'A' : 1., 'B' : pd.Timestamp('20130102'), 'C' : pd.Series(1,index=list(range(4)),dtype='float32'), 'D' : np.array([3] * 4,dtype='int32'), 'E' : pd.Categorical(["test","train","test","train"]), 'F' : 'foo' }) >>> df2 A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo
可以发现字典的key值,自动变成了列index,而行index是自动生成的 。
- 查看不同列的数据类型
>>> df2.dtypes
A float64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object