学习资料
- http://c.biancheng.net/pandas/what-is-pandas.html
- http://c.biancheng.net/pandas/series.html
- http://c.biancheng.net/pandas/dataframe.html
Pandas名字衍生自术语“Panel Data”面板数据和“Data Analysis”数据分析两个名词的组合。在经济学中,Panel Data
是一个关于多维数据集的术语。Pandas最初应用于金融量化交易领域。
Pandas出现前Python在数据分析任务主要承担着数据采集和数据预处理的工作,对数据分析支持十分有限。Pandas的出现使Python做数据分析的能力得到大幅提升,它主要实现了数据分析的五个重要环节:加载数据、整理数据、操作数据、构建数据模型、分析数据。
Pandas是一个强大的分析结构化数据的工具集,基于NumPy库(提供高性能的矩阵运算)开发而来,可与科学计算库配合使用。在概念上更接近Excel和SQL。
数据结构
构建和处理多维数组是一项繁琐的任务,Pandas解决了这一问题。它在NumPy的ndarray
组数基础上构建出两种不同的数据结构,分别是一维数据结构Series
和二维数据结构DataFrame
。
数据结构 | 维数 | 描述 |
---|---|---|
Series | 一维 | 序列,带标签(索引)的一维数组,索引不限于整数,可以是字符串。 |
DataFrame | 二维 | 数据帧,一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型。既有行标签,也有列标签。 |
import pandas as pd
print(pd.__version__)
Series
Series结构也称为序列,是一种类似于一维数组的结构,由一组数据值value
和一组标签组成,标签与数据值之间是一一对应的关系。
- Series是一维数据结构,维数不可改变。
- Series数据结构能够存储各种数据类型
- Series使用
name
和index
属性来描述数据值
创建序列
- Pandas中使用
Series()
函数来创建Series对象
pandas.Series(data, index, dtype, copy)
参数 | 必填 | 描述 |
---|---|---|
data | N | 输入的数据,可以是列表、常量、ndarray 数组等。 |
index | N | 索引值,必须唯一。若无则默认为np.arrange(n) 。 |
dtype | N | 数据类型,若无则会自动推导得出。 |
copy | N | 是否对data 进行拷贝,默认为False 。 |
例如:创建空序列对象
import pandas as pd
s = pd.Series()
print(s) # Series([], dtype: float64)
pandas
包一般使用别名pd
来代替
- 使用
ndarray
创建序列
ndarray
是NumPy中的数组类型,当Series()
中data
为ndarray
时,传递的索引必须具有与数组相同的长度。若没有给index
参数传参,默认索引值将使用range(n)
生成。索引默认从0开始分配,范围从0到len(data)-1
,这种设置方式又称为“隐式索引”。
import numpy as np
import pandas as pd
s = pd.Series(np.array(['a', 'b', 'c']))
print(s)
0 a
1 b
2 c
dtype: object
- 使用
dict
字典创建序列
将dict
字典作为输入数据时,若没有传入索引则会按照字典的键来构造索引,若传递了索引则需将索引标签与字典中的值一一对应。
import numpy as np
import pandas as pd
s = pd.Series({'x':1, 'y':2, 'z':3})
print(s)
x 1
y 2
z 3
dtype: int64
为index
索引参数传递索引时
import numpy as np
import pandas as pd
data = {'x':10., 'y':20., 'z':30.}
index = ['z', 'x', 'a']
s = pd.Series(data, index)
print(s)
z 30.0
x 10.0
a NaN
dtype: float64
当传递的索引值无法找到与之对应的值时会使用NaN
非数字来表示。
- 使用标量创建序列
- 若输入数据为标量值则必须提供索引
- 标量值会按照索引的数据进行赋值并与其一一对应
import numpy as np
import pandas as pd
data = 100
index = [0, 1, 2]
s = pd.Series(data, index)
print(s)
0 100
1 100
2 100
dtype: int64
访问序列
访问序列对象中元素分为两种方式:一种是位置索引访问,一种是索引标签访问。
- 按位置索引访问
- 此方式与
ndarray
和list
相同,使用元素自身下标。数组索引计数从0开始,表示第一个元素存储在第0个索引位置上,以此类推。
例如:通过位置或标签下标访问元素
import numpy as np
import pandas as pd
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index)
print(s)
print(s[0]) # 位置下标
print(s['a']) # 标签下标
a 10
b 20
c 30
d 40
e 50
dtype: int64
10
10
- 通过切片访问序列中元素
import numpy as np
import pandas as pd
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index)
print(s[-3:])
c 30
d 40
e 50
dtype: int64
- 按标签索引访问
- 序列类似固定大小的字典,将
index
中的索引标签当作key
,把序列中的元素值作为value
,通过index
索引标签来访问或修改元素。
例如:使用索引标签访问多个元素值
- 使用
index
中不包含的标签时会出发异常
import numpy as np
import pandas as pd
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index)
idx = ['a', 'c', 'e']
print(s[idx])
a 10
c 30
e 50
dtype: int64
序列属性
序列属性 | 描述 |
---|---|
index | 获取Rangeindex 对象用以描述索引的取值范围 |
axes | 以列表的形式返回所有行索引标签 |
values | 以ndarray 的形式返回序列对象 |
dtype | 获取序列对象的数据类型 |
empty | 获取一个空的序列对象 |
ndim | 获取输入数据的维度 |
size | 获取输入数据的元素数量 |
例如:创建序列并获取属性
import numpy as np
import pandas as pd
data = np.random.randn(5)
s = pd.Series(data)
print(s)
print(s.index) # RangeIndex(start=0, stop=5, step=1)
print(s.axes) # [RangeIndex(start=0, stop=5, step=1)]
print(s.values) # [0.24913463 0.62854834 0.28542668 0.73411569 1.14845944]
print(s.dtype) # float64
print(s.empty) # False
print(s.ndim) # 1
print(s.size) # 5
序列方法
方法 | 描述 |
---|---|
head() | 获取前n行数据,默认显示前5行。 |
tail() | 获取后n行数据,默认显示后5行。 |
isnull() | 检测序列是否存在缺失值,存在则为True 。 |
notnull() | 检测序列是否存在缺失值,不存在则为True 。 |
缺失值表示值不存在、丢失、缺少。
例如:查看序列中部分数据
import numpy as np
import pandas as pd
data = np.random.randn(5)
s = pd.Series(data)
print(s.head(3))
0 -0.317722
1 -1.051894
2 0.718421
dtype: float64
print(s.isnull())
0 False
1 False
2 False
3 False
4 False
dtype: bool
DataFrame
DataFrame是一种表格型的数据结构,既有行索引(index)也有列索引(columns),又被称为异构数据表。所谓异构,是指表格中每列的数据类型可以不同。
import pandas as pd
df = pd.DataFrame({
"index": [0, 1, 2, 3],
"name":["小明", "小华", "小亮", "小红"],
"age":[28, 29, 30, 26],
"gender":["男", "女", "男", "女"],
"rating":[3.4, 4.6, 3.5, 2.9]
})
print(df)
index name age gender rating
0 0 小明 28 男 3.4
1 1 小华 29 女 4.6
2 2 小亮 30 男 3.5
3 3 小红 26 女 2.9
异构数据表中,数据以行和列的形式来表示,每一列表示一个属性,每一行表示一个条目的信息。
每列标签描述数据的类型
Column | Type |
---|---|
name | String |
age | integer |
gender | String |
rating | Float |
DataFrame中行可被看作由Serials组成的字典,只是为行中每个数据增加了一个列标签。DataFrame其实是从Series基础上演化而来。数据分析中DataFrame应用非常广泛,因为描述数据更加清晰直观。
import pandas as pd
df = pd.DataFrame({
"Regd.No": [1000, 1001, 1002, 1003, 1004],
"Name":["Steve", "Mathew", "Jose", "Patty", "Vin"],
"Marks%":[86.29, 91.63, 72.90, 69.23, 88.30]
})
print(df)
Regd.No Name Marks%
0 1000 Steve 86.29
1 1001 Mathew 91.63
2 1002 Jose 72.90
3 1003 Patty 69.23
4 1004 Vin 88.30
DataFrame结构类似Excel表格,同Series一样DataFrame自带行标签索引,默认为隐式索引,从0开始递增。行标签与DataFrame中的数据项一一对应。