栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Pandas数据分析入门

Pandas数据分析入门

Pandas学习

文章目录

Pandas学习 (一).前言:(二).Pandas的安装:(三).Pandas对象简介:

1.Pandas的Series对象

1.1 Series是通用的Numpy数组 1.2. Series是特殊的字典1.3. 创建Series对象 2. Pandas的Dataframe对象

2.1.Dataframe是通用的Numpy数组2.2. Dataframe是特殊的字典2.3.创建Dataframe对象

2.3.1通过单个Series创建.2.3.2 通过字典列表创建:2.3.3 还有一种就是上述2.1.所示例的创建方法.2.3.4 通过Numpy二维数组创建.2.3.5 通过Numpy结构化数组创建. 3.Pandas的index对象

3.1.将index看做成一个不可变数组 3.2.将Index看作有序集合 (四)数据取值与选择

1 Series的数据选择方法1.1把Series当作字典1.2.同理也可以将Series当作一维数组1.3. 使用索引器:loc,iloc和ix(不常用).

1.3.1 第一种就是loc属性,表示取值和切片都是显式索引1.3.2第二种就是iloc属性表示都用的是隐式索引1.3.3第三种属性就是ix 2.Dataframe的数据选择方法2.1将Dataframe看作字典2.2将Dataframe理解为加强版的二维数组2.3使用loc,iloc (五)Pandas数值运算方法

(一).前言:

Pandas是建立在Numpy数据结构上的,尤其时它的Series 和Dataframe对象,为数据科学家们处理那些消耗大量时间的"数据清理"任务提供了捷径.
下面我将重点介绍Series ,Dataframe和其他数据结构的高效使用方法.

(二).Pandas的安装:

在安装Pandas之前首相要确保你已经安装了Numpy,详细的安装方法,请参考Pandas官方文档(http://pandas.pydata.org/).

(三).Pandas对象简介:
三个基本数据结构:Series,Dataframe,和Index.
1.Pandas的Series对象 1.1 Series是通用的Numpy数组

Series对象和一维Numpy数组基本可以等价交换,本质差异就是索引:
Numpy通过隐式定义的整数索引获取数值,而Series使用一种显式定义的索引与数值关联,意思就是索引不单单可以是整数,还可以是任意想要的类型,例如:字符串,浮点数等等.

data = pd.Series([0.25,0.5,0.75,1.0],index=['a','b','c','d'])
print(data)

输出结果:

a    0.25
b    0.50
c    0.75
d    1.00
dtype: float64

也可以使用不连续或者不按顺序的索引:

data = pd.Series([0.25,0.5,0.75,1.0],index=[2,5,3,7])
print(data)

输出结果:

2    0.25
5    0.50
3    0.75
7    1.00
dtype: float64
进程已结束,退出代码为 0
1.2. Series是特殊的字典

Series其实是一种将类型键映射到类型值的数据结构.
我们可以直接使用字典创建一个Series对象:

area_dict={'California':423967,'Texas':605662,'New York':141297,'Florida':170312,'Illinois':149995}
area=pd.Series(area_dict)
print(area)

输出结果:

California    423967
Texas         605662
New York      141297
Florida       170312
Illinois      149995
dtype: int64

用字典创建Series时,典型的字典数值获取方式仍然有效

 print(population['California'])
1.3. 创建Series对象

上述几种创建方式都是这样的形式

pd.Series(data,index=index)

其中index是一个可选参数,data参数支持多种数据类型.
例如:data可以是一个Numpy数组

pd.Series([2,4,6])

输出结果:

0    2
1    4
2    6
dtype: int64

data也可以是一个标量,创建时会重复填充到每一个索引上:

pd.Series(5,index=[100,200,300])

输出结果:

100    5
200    5
300    5
dtype: int64

data还可以是一个字典,index默认是排序的字典键:

pd.Series({2:'a',1:'b',3:'c'})

输出结果:

2    a
1    b
3    c
dtype: object

每一种形式都可以通过显式指定索引:

pd.Series({2:'a',1:'b',3:'c'},index=[3,2])

输出结果:

3    c
2    a
dtype: object

需要注意的是,Series只会保留显式定义的键值对.

2. Pandas的Dataframe对象

Pandas的另一个基础数据结构就是Dataframe.也可以作为Numpy的一个通用类型数组,也可以看作特殊的字典.

2.1.Dataframe是通用的Numpy数组

前面我们了解到了,Series是有灵活的行索引的一维数组,那么Daraframe就可以看做,是一种既具有灵活的行索引,还具有灵活的列名的二维数组.

population_dict={'California':38332521,'Texas':26448193,'New
York':19651127,'Florida':19552860,'Illinois':12882135}

population=pd.Series(population_dict)

area_dict={'California':423967,'Texas':605662,'New York':141297,'Florida':170312,'Illinois':149995}

area=pd.Series(area_dict)

states=pd.Dataframe({'population':population,'area':area})
print(states)

输出结果:

            population    area
California    38332521  423967
Texas         26448193  605662
New York      19651127  141297
Florida       19552860  170312
Illinois      12882135  149995
进程已结束,退出代码为 0

可以看到Dataframe类似于二维数组,具有列名的对象
和Series一样,Dataframe也有index属性可以获取索引标签:

print(states.index)

输出结果:

Index(['California', 'Texas', 'New York', 'Florida', 'Illinois'], dtype='object')

另外,Dataframe还有一个columns属性,是存放列标签的index对象:

print(states.columns)

输出结果:

Index(['population', 'area'], dtype='object')
2.2. Dataframe是特殊的字典

Dataframe是一种一列映射一个Series值的数据.例如:通过area可以返回包含列属性的Series对象:

print(states['area'])

输出结果:

California    423967
Texas         605662
New York      141297
Florida       170312
Illinois      149995
Name: area, dtype: int64
进程已结束,退出代码为 0

注意:在Numpy二维数组里面,data[0]是返回第一行,而Dataframe中data[‘col0’]是返回第一列

2.3.创建Dataframe对象 2.3.1通过单个Series创建.

Dataframe是多个Series对象的集合,可以用单个Series来创建一个单列的Dataframe:

population_dict={'California':38332521,'Texas':26448193,'New York':19651127,'Florida':19552860,'Illinois':12882135}
population=pd.Series(population_dict)
states=pd.Dataframe({'population':population,'area':area})
data=pd.Dataframe(population,columns=['population'])
print(data)

输出结果:

            population
California    38332521
Texas         26448193
New York      19651127
Florida       19552860
Illinois      12882135
进程已结束,退出代码为 0
2.3.2 通过字典列表创建:
data=[{'a':i,'b':i*2}
          for i in range(0,3)]
data01=pd.Dataframe(data)
print(data01)

输出结果:

   a  b
0  0  0
1  1  2
2  2  4

即使字典中的有些键不存在,Pandas也会用NaN来表示:

data=pd.Dataframe([{'a':1,'b':2},{'b':3,'c':4,'d':5}])
print(data)

输出结果:

     a  b   c   d
0  1.0  2  NaN  NaN
1  NaN  3  4.0  5.0
2.3.3 还有一种就是上述2.1.所示例的创建方法.

通过Series对象构成的字典

2.3.4 通过Numpy二维数组创建.

假如有一个二维数组,就可以创建一个指定行索引的Dataframe对象,如果不指定,那么就默认是整数索引值.

data01=pd.Dataframe(np.random.rand(3,2),index=['a','b','c'],columns=['num1','num2'])
print(data01)

输出结果:

#这个是指定行索引
       num1      num2
a  0.558924  0.558841
b  0.294003  0.305038
c  0.625494  0.760208
#这个是未指定行索引
       num1      num2
0  0.065357  0.172990
1  0.831366  0.892077
2  0.726851  0.422833
进程已结束,退出代码为 0
2.3.5 通过Numpy结构化数组创建.
A=np.zeros(3,dtype=[('A','i8'),('B','f8')])
print(A)
a=pd.Dataframe(A)
print(a)

输出结果:

[(0, 0.) (0, 0.) (0, 0.)]
   A    B
0  0  0.0
1  0  0.0
2  0  0.0
进程已结束,退出代码为 0
3.Pandas的index对象

index是一个很有趣的数据结构,我们可将它看做成一个有序集合,或者不可变数组.

3.1.将index看做成一个不可变数组

index许多操作都很像数组.我们试着用一个简单的整数列表来创建一个index对象:

ind=pd.Index([2,3,5,7,11])

然后对其进行简单的数组操作:

#取值
print(ind[1])
#切片
print(ind[::2])

输出结果:

3
Int64Index([2, 5, 11], dtype='int64')

Index还有许多与数组相类似的属性:

print(ind.shape,ind.size,ind.ndim,ind.dtype)

输出结果:

(5,) 5 1 int64

Index对象与数组不同之处在于,Index对象的索引是不可变的
这个特点的好处就是,可以避免因粗心大意而修改索引值的副作用,多个Dataframe与数组之间进行索引共享时更加安全.

3.2.将Index看作有序集合

Index遵循python标准库集合用法,包括并集,交集,差集等

indA=pd.Index([1,2,3,4,5])
indB=pd.Index([3,4,5,6,7])
print(indA&indB)#交集
print(indA|indB)#并集
print(indA^indB)#差集

输出结果:

Int64Index([3, 4, 5], dtype='int64')#交集
Int64Index([1, 2, 3, 4, 5, 6, 7], dtype='int64')#并集
Int64Index([1, 2, 6, 7], dtype='int64')#差集

这些操作还可以用调用对象方法来实现例如:indA.intersection(intB)

(四)数据取值与选择 1 Series的数据选择方法 1.1把Series当作字典

和字典一样series提供了键值对的映射:

import pandas as pd
data=pd.Series([1,2,3,4],index=['a','b','c','d'])
print(data['a'])

输出结果:

1

还可以用字典的语法来调整Series
增添新的索引值来扩展Series

data['e']=5
print(data)

输出结果:

a    1
b    2
c    3
d    4
e    5
dtype: int64
进程已结束,退出代码为 0
1.2.同理也可以将Series当作一维数组 1.3. 使用索引器:loc,iloc和ix(不常用).

由于上述方法容易混淆显式索引和隐式索引,毕竟整数索引就很容易混淆
所以Pandas就提供了索引器属性.

1.3.1 第一种就是loc属性,表示取值和切片都是显式索引
import pandas as pd
data=pd.Series([1,2,3,4],index=['a','b','c','d'])
print(data.loc['a'])
print(data.loc['a':'d'])

输出结果:

1
a    1
b    2
c    3
d    4
dtype: int64
进程已结束,退出代码为 0
1.3.2第二种就是iloc属性表示都用的是隐式索引
data=pd.Series([1,2,3,4],index=['a','b','c','d'])
print(data.iloc[1])
print(data.iloc[0:3])

输出结果:

2
a    1
b    2
c    3
dtype: int64
1.3.3第三种属性就是ix

pandas版本0.20.0及其以后版本中,ix已经不被推荐使用
这个属性就是前两种属性的混合形式,我强烈建议使用前两种索引器,避免误用索引,也是自己的代码更容易理解.

2.Dataframe的数据选择方法

先用字典的形式创建一个Dataframe对象;

import pandas as pd
num01=pd.Series({'a':11,'b':22,'c':33})
num02=pd.Series({'a':1,'b':2,'c':3})
num=pd.Dataframe({'num01':num01,'num02':num02})
print(num)

输出:

   num01  num02
a     11      1
b     22      2
c     33      3
2.1将Dataframe看作字典

这个和Series是一样的,不多做解释.

2.2将Dataframe理解为加强版的二维数组

这样我们就可以对它进行更多操作,例如:
转置: num.T
取单行:

print(num.values[0])

输出:

[11  1]

取单列:

print(num.num01)

输出:

a    11
b    22
c    33
Name: num01, dtype: int64
2.3使用loc,iloc
print(num.iloc[:3, :2])
print(num.loc[:'c',:'num02'])

输出:

   num01  num02
a     11      1
b     22      2
c     33      3
   num01  num02
a     11      1
b     22      2
c     33      3

任何一种方法都可调整数据,这一点和Numpy的常用方法是相同的:

num.iloc[0]=90

输出:

   num01  num02
a     90     90
b     22      2
c     33      3
(五)Pandas数值运算方法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号