前言
本系列博文为利用 Python 进行数据分析相关工具包的学习,主要包含NumPy、pandas和matplotlib.
一、pandas是什么?
NumPy 是将矩阵序列化,使用NumPy中避免了使用循环语句以达到某些计算目的。相比于NumPy,pandas则更像是“字典型的NumPy”,因为在pandas中我们可以给矩阵的行和列进行不同的命名。
总体来说,pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,二者相互搭配使用。
二、pandas基本介绍
首先先引入pandas工具包,代码如下:
import numpy as npimport pandas as pd12
2.1 创建pandas序列
s = pd.Series([1, 2, 3, 6, np.nan, 4]) #注意这里的Serious首字母要大写s# 0 1.0# 1 2.0# 2 3.0# 3 6.0# 4 NaN# 5 4.0# dtype: float64123456789
上述代码中的np.nan为空值。注意在输入值的前侧有0-5的index,这有点像NumPy中的一维数据的索引。而dtype: float64则表示输入的数字格式为64位浮点型数值。
注:不同于NumPy中有int、float多种数值类型,Series中只有float一种数值类型。
2.2 创建DataFrame
矩阵在pandas中被称为DataFrame。首先需要定义一个date来作为描述其行的索引,如果不指定索引,则默认索引为0,1,2,…
dates = pd.date_range('20160101', periods=6)dates# DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',# '2016-01-05', '2016-01-06'],# dtype='datetime64[ns]', freq='D')12345
注意这里的dtype是日期(datatime[64])。
df = pd.(np.random.randn(6, 4), index=dates, columns=['a', 'b', 'c', 'd'])df# a b c d# 2016-01-010.765527-0.681561-1.078267-1.464479# 2016-01-02-1.0227561.3137070.158951-0.261652# 2016-01-03-0.0164200.4635521.9246331.851053# 2016-01-04-0.797636-1.285860-0.6918401.170988# 2016-01-050.306082-0.2425420.1665301.747711# 2016-01-06-0.1865620.9590310.1100470.666948123456789
上述代码生成的DateFrame类似于NumPy中的矩阵,其中数据是使用NumPy中随机抽样所得,行索引(index)为之前定义的日期,列索引(columns)为[‘a’, ‘b’, ‘c’, ‘d’].
下面看一些不指定行索引和列索引情况下的输入。
df1 = pd.DataFrame(np.random.randn(12).reshape(3, -1))df1# 0 1 2 3# 0 1.623124-0.059781-0.5459611.278110# 1 0.535882-0.0122191.4292411.283243# 2 -0.5585770.288868-1.3809401.057342123456
这里的行列索引为默认的0,1,2,3.
2.3 DataFrame的基本属性
3.1 属性dtypes
dtypes表示DataFrame中每一列的数值属性
df1.dtypes# 0 float64# 1 float64# 2 float64# 3 float64# dtype: object123456
3.2 索引
输出DataFrame中所有的索引。
df1.index # 输出所有行标签# RangeIndex(start=0, stop=3, step=1)df1.columns # 输出所有列标签# RangeIndex(start=0, stop=4, step=1)1234
3.3 数值
输出所有数值(values)
df1.values# array([[ 1.62312401, -0.05978129, -0.54596109, 1.2781104 ],# [ 0.53588153, -0.01221874, 1.42924132, 1.28324285],# [-0.5585765 , 0.28886821, -1.38094041, 1.05734184]])1234
3.4 描述
这里用describe()计算出一些统计量来描述每一列的一些信息。这里要注意describe()只针对数值类型的列进行计算,例如字符串类的列跳过不做分析。
df1.describe()# 0 1 2 3# count3.0000003.0000003.0000003.000000 #数据个数# mean0.5334760.072289-0.1658871.206232 #数据均值# std1.0908520.1890641.4431290.128968 #数据标准差# min-0.558577-0.059781-1.3809401.057342# 25%-0.011347-0.036000-0.9634511.167726# 50%0.535882-0.012219-0.5459611.278110# 75%1.0795030.1383250.4416401.280677# max1.6231240.2888681.4292411.28324312345678910
3.5 转置
df1.T# 0 1 2# 01.6231240.535882-0.558577# 1-0.059781-0.0122190.288868# 2-0.5459611.429241-1.380940# 31.2781101.2832431.057342123456
3.6 排序
df1.sort_index(axis=1, ascending=False) 1
上述代码中是根据列(index=1表示列,取0时表示行)名称进行排序,同时可以对ascending赋值True或False来确定是正向排序还是倒序。
不仅仅可以对行列索引进行排序,也可以对其中某个列的取值进行排序。
df1.sort_values(by=2) # 根据列索引为2的列中的值进行从小到大(默认)进行排序1