简介
pandas是数据处理和分析的操作工具,它是基于NumPy实现的,因此很多操作方式和NumPy相似。pandas广泛应用于数据处理领域,尤其在金融、机器学习方面应用甚多。它具有以下功能:
- 能够按轴自动对齐数据;
- 集成时间序列功能;
- 同时处理时间序列数据和非时间序列数据;
- 方便的进行算术运算和统计功能;
- 灵活处理缺失值;
- 快速合并数据;
- 处理常见数据库的数据。
可以说pandas是数据分析师必备工具。在python中约定俗成的导入规则是:
1 |
import pandas as pd |
在pandas中,有两种主要的数据结构:
- Series
- DataFrame
接下来将一一介绍。
Series
Series可以看成是一维数组,它是由一组数据和与之相关的索引做成。可以通过series()
函数创建;
1 2 3 4 5 6 7 8 9 |
>>>import pandas as pd >>>a = pd.Series([5, 2, 0 ,1]) >>>a 0 5 1 2 2 0 3 1 dtype: int64 |
可以看出,创建的Series数据有两列值,第一列为索引值,如果创建的时候没有指定,就会默认使用0到N-1的整数索引;第二列为数据值。也可以通过指定索引来创建一个Series数据:
1 2 3 4 5 6 7 8 9 |
>>>import pandas as pd >>>b = pd.Series([5, 2, 0, 1], index=['a', 'b', 'c', 'd']) >>>b a 5 b 2 c 0 d 1 dtype: int64 |
可以使用values
和index
属性获取它的数组形式和索引对象:
1 2 3 4 5 |
>>>b.values array([5, 2, 0, 1], dtype=int64) >>>b.index Index(['a', 'b', 'c', 'd'], dtype='object') |
除此之外,还可以通过引入一个字典创建Series:
1 2 3 4 5 6 7 8 9 |
>>>import pandas as pd >>>dict1 = {'a': 1, 'b': 2, 'c': 3} >>>c = pd.Series(dict1) >>>c a 1 b 2 c 3 dtype: int64 |
Series的索引也可以通过赋值的方式就地修改:
1 2 3 4 5 6 |
>>>c.index = list('efg') >>>c e 1 f 2 g 3 dtype: int64 |
重新赋值的索引长度要和原来的长度一致才行。
DataFrame
DataFrame是一种表格型数据结构,可以把它看成是多个Series的组合。除了数据值以外,它既有行索引也有列索引。虽然DataFrame是以二维结构保存数据,但是通过层次化索引可以表示更高维度的数据。创建DataFrame的方法有很多,通常使用一个等长列表或NumPy数组组成的字典创建DataFrame:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>>import numpy as np >>>import pandas as pd >>>data = {'name': ['jack', 'jones', 'lucy','ada'], 'age': np.array([12, 13, 11, 12]), 'height':[1.8, 1.6, 1.7, 1.6]} >>>d = pd.DataFrame(data) >>>d name age height 0 jack 12 1.8 1 jones 13 1.6 2 lucy 11 1.7 3 ada 12 1.6 |
通过字典创建的DataFrame,字典中的键变成了列索引。如果没有指定行索引,默认使用0到N-1的整数型索引。同样我们可以通过index
关键字指定行索引:
1 2 3 4 5 6 7 |
>>>e = pd.DataFrame(data, index=list('abcd')) >>>e name age height a jack 12 1.8 b jones 13 1.6 c lucy 11 1.7 d ada 12 1.6 |
如果我们要指定列的顺序,在创建DataFrame的时候通过columns
关键字实现:
1 2 3 4 5 6 7 |
>>>f = pd.DataFrame(data, columns=['name', 'height', 'age'], index=list('abcd')) >>>f name height age a jack 1.8 12 b jones 1.6 13 c lucy 1.7 11 d ada 1.6 12 |
与Series一样,通过values
和index
属性获取它的数组形式和索引对象。除此之外,DataFrame还可以通过类似字典标记的方式或属性的方式访问指定的列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
>>>f.values array([['jack', 1.8, 12], ['jones', 1.6, 13], ['lucy', 1.7, 11], ['ada', 1.6, 12]], dtype=object) >>>f.index Index(['a', 'b', 'c', 'd'], dtype='object') >>>f['name'] # 类似字典标记的方式 a jack b jones c lucy d ada Name: name, dtype: object >>>f.name # 访问属性的方式 a jack b jones c lucy d ada Name: name, dtype: object |
另一种常见的创建DataFrame的方式是传入嵌套字典:
1 2 3 4 5 6 7 8 9 10 11 |
>>>data = {'name': {'a': 'jack', 'b': 'jones', 'c': 'lucy', 'd': 'ada'}, 'age': {'a': 12, 'b': 13, 'c': 11, 'd': 12}, 'height': {'a': 1.8, 'b': 1.6, 'c': 1.7, 'd': 1.6}} >>>g = pd.DataFrame(data) >>>g name age height a jack 12 1.8 b jones 13 1.6 c lucy 11 1.7 d ada 12 1.6 |
还可以通过赋值的方式修改列或者增加列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>>g['height'] = 1.8 >>>g name age height a jack 12 1.8 b jones 13 1.8 c lucy 11 1.8 d ada 12 1.8 >>>g['gender'] = ['male', 'male', 'female', 'female'] >>>g name age height gender a jack 12 1.8 male b jones 13 1.8 male c lucy 11 1.8 female d ada 12 1.8 female |
如果不需要某列,可以通过del
关键字删除:
1 2 3 4 5 6 7 |
>>>del g['gender'] >>>g name age height a jack 12 1.8 b jones 13 1.8 c lucy 11 1.8 d ada 12 1.8 |
总结
本文介绍了pandas中两种主要的数据结构以及它们的创建方式。在实际使用过程中,Series使用相对较少。在后续的文章中将会详细介绍DataFrame的使用。