Pandas

pandas

学习资料

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使用nameindex属性来描述数据值
Serial序列

创建序列

  1. Pandas中使用Series()函数来创建Series对象
pandas.Series(data, index, dtype, copy)
参数必填描述
dataN输入的数据,可以是列表、常量、ndarray数组等。
indexN索引值,必须唯一。若无则默认为np.arrange(n)
dtypeN数据类型,若无则会自动推导得出。
copyN是否对data进行拷贝,默认为False

例如:创建空序列对象

import pandas as pd
s = pd.Series()
print(s) # Series([], dtype: float64)

pandas包一般使用别名pd来代替

  1. 使用ndarray创建序列

ndarray是NumPy中的数组类型,当Series()datandarray时,传递的索引必须具有与数组相同的长度。若没有给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
  1. 使用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非数字来表示。

  1. 使用标量创建序列
  • 若输入数据为标量值则必须提供索引
  • 标量值会按照索引的数据进行赋值并与其一一对应
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

访问序列

访问序列对象中元素分为两种方式:一种是位置索引访问,一种是索引标签访问。

  1. 按位置索引访问
  • 此方式与ndarraylist相同,使用元素自身下标。数组索引计数从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
  1. 通过切片访问序列中元素
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
  1. 按标签索引访问
  • 序列类似固定大小的字典,将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以列表的形式返回所有行索引标签
valuesndarray的形式返回序列对象
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

异构数据表中,数据以行和列的形式来表示,每一列表示一个属性,每一行表示一个条目的信息。

异构数据表

每列标签描述数据的类型

ColumnType
nameString
ageinteger
genderString
ratingFloat

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中的数据项一一对应。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值