Pandas是基于NumPy用于解决数据分析任务的一种工具,它纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。虽然pandas采用了大量的NumPy编码风格,但二者最大的不同是pandas是专门为处理表格和混杂数据设计的。而NumPy更适合处理统一的数值数组数据。
要使用pandas,首先得熟悉它的两个主要数据结构: Series和DataFrame。虽然它们并不能解决所有问题,但它们为大多数应用提供了一种可靠的、易于使用的基础。今天我们来介绍Series与DataFrame这两种数据结构的操作。
一、Series
Series是一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series能保存任何类型数据,包括整数,字符串,浮点数,boolean值、Python对象等。
参数:
- data 参数
- index 索引 索引值必须是唯一的和散列的,与数据的长度相同。默认np.arange(n)如果没有索引被传递。
- dtype 输出的数据类型 如果没有,将推断数据类型
- copy 复制数据 默认为false
1. Series创建
数组创建
1. import pandas as pd
2. import numpy as np
3. data = ['a','b','c','d','e']
4. res= pd.Series(data,index=[i for i in range(1,6)],dtype=str)
5. print(res)
字典创建
1. import pandas as pd
2. import numpy as np
3. data = {"a":1.,"b":2,"c":3,"d":4}
4. res = pd.Series(data,index=["d","c","b","a"])
5. print(res) # 字典的键用于构建索引
常量创建
1. import pandas as pd
2. import numpy as np
3. # 如果数据是常量值,则必须提供索引。将重复该值以匹配索引的长度。
4. res = pd.Series(5,index=[1,2,3,4,5])
5. print(res)
2. 数据访问
使用head()/tail()访问
1. data = [1,2,3,4,5]
2. res = pd.Series(data,index=["a","b","c","d","e"])
3. res.head(3) # 查看前三个
4. res.tail(2) # 查看后两个
访问指定行数据
1. data = [1,2,3,4,5]
2. res = pd.Series(data,index=["a","b","c","d","e"])
3. res
4. res[[2,0,4]] #取出第2、0、4行数据
3. 排序函数
4. data = [1,2,3,4,5]
5. res= pd.Series(data,index=['a', 'b', 'c', 'd', 'e'])
6. res
7. res.sort_index(ascending=False) #按index从大到小,True从小到大
8. res.sort_values(ascending=False)
9. res.rank(method='average',ascending=False,axis=0) #每个数的平均排名
10.
11. #返回含有最大值的索引位置:
12. print(res.idxmax())
13. #返回含有最小值的索引位置:
14. print(res.idxmin())
二、DataFrame
DataFrame是⼀个表格型的数据结构,它含有⼀组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有⾏索引也有列索引,它可以被看做由Series组成的字典(共⽤同⼀个索引)。 DataFrame中的数据是以⼀个或多个⼆维块存放的(⽽不是列表、字典或别的⼀维数据结构)。
1. 数据表创建
我们读取证券时报网的一篇文章数据来创建数据表(http://data.stcn.com/2019/0304/14899644.shtml)
1. import pandas as pd
2. import numpy as np
3. df = pd.read_html("http://data.stcn.com/2019/0304/14899644.shtml",flavor ='lxml')
4. df
5.
6. index =['a','b','c']
7. index
8.
9. df1 = pd.DataFrame(np.random.randn(3,4),index = index , columns = list('ABCD'))
10. df1
2. 数据的访问
读取文件生成DataFrame最常用的是read_csv,read_table方法。该方法中几个重要的参数如下所示:
参数 |
描述 |
header |
默认第一行为columns,如果指定header=None,则表明没有索引行,第一行就是数据 |
index_col |
默认作为索引的为第一列,可以设为index_col为-1,表明没有索引列 |
nrows |
表明读取的行数 |
sep或delimiter |
分隔符,read_csv默认是逗号,而read_table默认是制表符\t |
encoding |
编码格式 |
3. 创建时间序列
用苹果2017年12个月的股票值来创建时间序列
1. import pandas as pd
2. import numpy as np
3.
4. apple_share = pd.Series(np.random.randint(1000,3400,12))
5. apple_share
6.
7. apple_index = pd.date_range(start='20170101',end='20171231',freq="M")
8. apple_index
9.
10. apple_share.index = apple_index
11. apple_share
得到结果如下:
4. 缺失值处理
Pandas中缺失值相关的方法主要有以下三个:
isnull方法用于判断数据是否为空数据;
fillna方法用于填补缺失数据;
dropna方法用于舍弃缺失数据。
isnull方法和fillna方法对原数据没有影响,如果想在原数据上进行直接修改,使用inplace参数。
dropna方法如果发现缺失值,就会进行整行删除,不过可以指定删除的方式,how=all,是当整行全是na的时候才进行删除,同时还可以指定删除的轴。
1. data.dropna(how='all',axis=1,inplace=True)
2. data
DataFrame填充缺失值可以统一填充,也可以按列填充,或者指定一种填充方式:
1. data.fillna({1:2,2:3})
5. 统计分析
Pandas中对于数值型数据的描述性统计主要包括了计算数值型数据的完整情况、最小值、均值、中位数、最大值、四分 位数、极差、标准差、方差等。名称如下:
方法名称 |
说明 |
方法名称 |
说明 |
min |
最小值 |
max |
最大值 |
mean |
均值 |
ptp |
极差 |
median |
中位数 |
std |
标准差 |
var |
方差 |
COV |
协方差 |
sem |
标准误差 |
mode |
众数 |
skew |
样本偏度 |
kurt |
样本峰度 |
quantile |
四分位数 |
count |
非空值数目 |
describe |
描述统计 |
mad |
平均绝对离差 |
6. 数据合并
Pandas中DataFrame数据合并、连接的操作可使用如下参数:
(1) concat
可以指定连接的方式(outer join或inner join),还可以指定按照某个轴进行连接。
1. concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
2.
3. keys=None, levels=None, names=None, verify_integrity=False, copy=True):
(2) merge
通过键拼接列,可以根据一个或多个键将不同的DatFrame连接起来。
1. merge(left, right, how='inner', on=None, left_on=None, right_on=None,
2.
3. left_index=False, right_index=False, sort=True,
4.
5. suffixes=('_x', '_y'), copy=True, indicator=False)
(3) join
主要用于索引上的合并。
1. join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False):

