python数据分析复盘——数据分析相关库之Pandas

1.Pandas 简介

1.1 pandas是什么

  • Pandas是Python第三方库,提供高性能易用数据类型和分析工具
  • Pandas基于NumPy实现 ,常与NumPy和Matplotlib一同使用

1.2 pandas vs numpy

这里写图片描述

2.Pandas库的Series类型


2.1 Series的结构

#多维一列,形式是:索引+值。(省略index会自动生成,从0开始)

>>> pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
a    1
b    2
c    3
d    4
e    5
dtype: int64

2.2 Series的创建

Series类型可以由如下类型创建:

  • Python列表
  • 标量值
  • Python字典
  • ndarray
  • 其他函数,range()等
#标量值
>>> pd.Series(5)
0    5
dtype: int64

#标量值+index 结果会根据索引重新排序
pd.Series(5,index=['a','v','c','d','e'])
a    5
v    5
c    5
d    5
e    5
dtype: int64

#字典
>>> pd.Series({'a':999,'v':888,'c':756,'d':7,'e':437})
a    999
c    756
d      7
e    437
v    888
dtype: int64

#字典+index
>>>pd.Series({'a':999,'v':888,'c':756,'d':7,'e':437},index=['a','v'])
a    999
v    888
dtype: int64

#用ndarray创建
>>> pd.Series(np.arange(5),index=np.arange(14,9,-1))
14    0
13    1
12    2
11    3
10    4
dtype: int32

Seriesd的创建总结:

  • Series类型可以由如下类型创建:
  • Python列表,index与列表元素个数一致
  • 标量值,index表达Series类型的尺寸
  • Python字典,键值对中的“键”是索引,index从字典中进行选择操作
  • ndarray,索引和数据都可以通过ndarray类型创建
  • 其他函数,range()函数等

2.3 Series基本操作

  • Series类型包括index和values两部分
  • Series类型的操作类似ndarray类型
  • Series类型的操作类似Python字典类型

(1)Series基本操作

#Series基本操作
>>>a=pd.Series({'a':1,'v':2,'c':3,'d':4,'e':5})
>>> a.index
Index(['a', 'c', 'd', 'e', 'v'], dtype='object')
>>> a.values
array([1, 3, 4, 5, 2], dtype=int64)

#两套索引并存,但不能混用

>>> a[['a','v']]
a    1
v    2
dtype: int64
>>> a[[0,4]]
a    1
v    2
dtype: int64

#混用,以靠前的为准
>>> a[['a',4]]
a    1.0
4    NaN
dtype: float64

(2)Series类型的操作类似ndarray类型:

  • 索引方法相同,采用 [ ]
  • 可以通过自定义索引的列表进行切片
  • 可以通过自动索引进行切片,如果存在自定义索引,则一同被切片
#采用 []切片 
>>> a=pd.Series({'a':1,'v':2,'c':3,'d':4,'e':5})
>>> a[:3]
a    1
c    3
d    4
dtype: int64
#在索引前进行运算
>>> a[a>a.median()]
d    4
e    5
dtype: int64

#以自然常数e为底的指数函数
>>> np.exp(a)
a      2.718282
c     20.085537
d     54.598150
e    148.413159
v      7.389056
dtype: float64

(3)Series类型的操作(类似Python)

  • 通过自定义索引访问
  • 保留字in操作
  • 使用.get()方法
#保留字in
>>> a=pd.Series({'a':1,'v':2,'c':3,'d':4,'e':5})
>>> 'a' in a 
True
>>> 'v' in a
True
#只匹配索引
>>> 1 in a
False

2.4 Series对齐操作

#Series类型在运算中会自动对齐不同索引的数据.(即对不齐,就当缺失项处理)
>>> a=pd.Series({'a':1,'v':2,'c':3,'d':4,'e':5})
>>> b=pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})
>>> a+b
a     2.0
b     NaN
c     6.0
d     8.0
e    10.0
v     NaN
dtype: float64

2.5 Series的name属性

#Series对象和索引都可以有一个名字,存储在属性.name中
a=pd.Series({'a':1,'v':2,'c':3,'d':4,'e':5})
>>> a.name
>>> a.name="精忠跳水队"
>>> a.name
'精忠跳水队'
>>> a
a    1
c    3
d    4
e    5
v    2
Name: 精忠跳水队, dtype: int64

2.6 Series小结

  • Series是一维带“标签”数组
  • index_0 → data_a
  • Series基本操作类似ndarray和字典,根据索引对齐

3.Pandas库的DataFrame类型


3.1 DataFrame结构

#DataFrame是一个表格型的数据类型,每列值类型可以不同
#DataFrame既有行索引、也有列索引

>>> df = pd.DataFrame(np.random.randint(1,10,(4,5)))
>>> df
   0  1  2  3  4
0  8  5  4  1  1
1  3  4  2  7  3
2  4  3  8  9  9
3  7  8  9  1  7

3.2 DataFrame的创建

DataFrame类型可以由如下类型创建:

  • ndarray对象
  • 由一维ndarray、列表、字典、元组或Series构成的字典
  • Series类型
  • 其他的DataFrame类型
#由字典创建 (自定义行列索引,会自动补齐缺失的值为NAN)
>>> df=pd.DataFrame({'one':pd.Series([1,2,3],index=['a','v','c']),'two':pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])})
>>> df
   one  two
a  1.0  1.0
b  NaN  2.0
c  3.0  3.0
d  NaN  4.0
e  NaN  5.0
v  2.0  NaN
#由字典+列表创建。统一index,尺寸必须相同
>>> df=pd.DataFrame({'one':[1,2,3],'two':[2,2,3],'three':[3,2,3]},index=['a','b','c'])
>>> df
   one  three  two
a    1      3    2
b    2      2    2
c    3      3    3
#索引(类似Series,依据行列索引)
>>> df['one']['a']
1
>>> df['three']['c']
3

3.3 pandas数据类型操作——重新索引

这里写图片描述

#由a b c改为c a b
>>> df.reindex(['c','a','b'])
   one  three  two
c    3      3    3
a    1      3    2
b    2      2    2
#重排并增加列
>>> df.reindex(columns=['three','two','one','two'])
   three  two  one  two
a      3    2    1    2
b      2    2    2    2
c      3    3    3    3
#原始的数据
>>> df
   one  three  two
a    1      3    2
b    2      2    2
c    3      3    3
#插入列
>>> newc=df.columns.insert(3,'新增')
>>> newc
Index(['one', 'three', 'two', '新增'], dtype='object')

#插入新数据
>>> newd=df.reindex(columns=newc,fill_value=99)
>>> newd
   one  three  two  新增
a    1      3    2  99
b    2      2    2  99
c    3      3    3  99

3.4pandas数据类型操作——索引类型

这里写图片描述

>>> df
   one  three  two
a    1      3    2
b    2      2    2
c    3      3    3
>>> nc=df.columns.delete(1)
>>> ni=df.index.insert(3,'new_index')
#无填充
>>> df.reindex(columns=nc,index=ni)
           one  two
a          1.0  2.0
b          2.0  2.0
c          3.0  3.0
new_index  NaN  NaN
#有填充
>>> df.reindex(columns=nc,index=ni,method='ffill')
           one  two
a            1    2
b            2    2
c            3    3
new_index    3    3

#删除行列
#默认删 除行
>>> df.drop('b')
   one  three  two
a    1      3    2
c    3      3    3
#轴1为列
>>> df.drop('three',axis=1)
   one  two
a    1    2
b    2    2
c    3    3

3.5pandas数据类型运算——算数运算

算数运算法则:
算术运算根据行列索引,补齐后运算,运算默认产生浮点数
补齐时缺项填充NaN (空值)
二维和一维、一维和零维间为广播运算
采用+ ‐ * /符号进行的二元运算产生新的对象

(1)采用+ ‐ * /符号进行的二元运算:

#用符号运算,无法处理缺失值
>>> df1 =pd.DataFrame({'one':[1,2,3],'two':[4,5,6]},index=['a','b','c'])
>>> df2 =pd.DataFrame({'one':[1,2,3]},index=['a','b','c'])
>>> df1+df2
   one  two
a    2  NaN
b    4  NaN
c    6  NaN

(2)采用方法形式进行二元运算:
这里写图片描述

>>> df1 =pd.DataFrame({'one':[1,2,3],'two':[4,5,6]},index=['a','b','c'])
>>> df2 =pd.DataFrame({'one':[1,2,3]},index=['a','b','c'])
#用方法进行运算,可选参数处理缺失值
>>> df1.add(df2,fill_value=0)
   one  two
a    2  4.0
b    4  5.0
c    6  6.0
#运算方式
#只对对应维度及对应位置进行运算,常数则进行广播运算。无匹配位置,则置为NAN
df =pd.DataFrame({'one':[1,2,3],'two':[2,2,3],'three':[3,2,3]},index=['a','b','c'])
df3=df=pd.DataFrame({'one':[1,2,3]},index=['a','b','c'])
df4=pd.DataFrame({'two':[2,2,3]},index=['a','b','c'])
#常数
>>> df3-1
   one
a    0
b    1
c    2
>>> df -1 
   one  three  two
a    0      2    1
b    1      1    1
c    2      2    2
#对应维度
>>> df3 -df 
   one  three  two
a    0    NaN  NaN
b    0    NaN  NaN
c    0    NaN  NaN

>>> df-df4
   one  three  two
a  NaN    NaN    0
b  NaN    NaN    0
c  NaN    NaN    0

3.6pandas数据类型运算——比较运算

(1)法则

  • 比较运算只能比较相同索引的元素,不进行补齐
  • 二维和一维、一维和零维间为广播运算
  • 采用>、<、 >=、 <= 、==、 !=等符号进行的二元运算产生布尔对象
>>> dfx
   one  three  two
a    1      3    2
b    1      3    2
c    1      3    2
>>> df
   one  three  two
a    1      3    2
b    2      2    2
c    3      3    3
>>> df>dfx
     one  three    two
a  False  False  False
b   True  False  False
c   True  False   True

4.Pandas数据类型小结

  1. 据类型与索引的关系,操作索引即操作数据
  2. Series = 索引+ 一维数据
  3. DataFrame = 行列索引+ 多维数据

  4. 重新索引、数据删除、算术运算、比较运算

  5. 像对待单一数据一样对待Series和DataFrame对象

大纲和部分内容截取自Python数据分析与展示

更多参考和练习:
1.10 Minutes to pandas
2.Cookbook for pandas


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值