欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pandas数据处理—Series、DataFrame对象

程序员文章站 2024-01-24 18:04:28
...

pandas数据处理——Series、DataFrame对象

Pandas的Series对象

创建Series对象
pd.Series(data,index=index)

index是一个可选参数,data参数支持多种数据类型,data可以是列表、NumPy数组、字典
Series对象将一组数据和一组索引绑定在一起,通过values属性和index属性获取数据

import numpy as np
import pandas as pd
data=pd.Series([0.25,0.5,0.75,1.0])
data.values
data.index

数据可以通过Python的中括号索引标签获取

data[1]
data[1:3]

pandas数据处理—Series、DataFrame对象
Series对象和一维NumPy数组基本可以等价交换,本质差异是索引:NumPy数组通过隐式定义的整数索引获取数值,而Pandas的Series对象用一种显示定义的索引与数值关联。显示索引的定义让Series对象的索引可以是整数也可以是任意想要的类型。

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

pandas数据处理—Series、DataFrame对象
可以把Pandas的Series对象看成一种特殊的Python字典,字典是一种将任意键映射到一组任意值的数据结构,Series对象其实是一种将类型键映射到一组类型值的数据结构。
可以直接用Python的字典创建一个Series对象,用字典创建Series对象时,其索引默认按照顺序排列

population_dict={'江苏':10000,'安徽':20000,'浙江':30000}
population=pd.Series(population_dict)

pandas数据处理—Series、DataFrame对象
Series对象支持典型的字典数值获取方式,还支持数组形式的操作,比如切片

population['江苏']
population['江苏':'安徽']

pandas数据处理—Series、DataFrame对象

Pandas的DataFrame对象

Series类比为带灵活索引的一维数组,dataFrame可以看作是一种有灵活行索引和灵活列名的二维数组。可以把DataFrame看成是有序排列的若干Series对象。

population_dict={'江苏':10000,'安徽':20000,'浙江':30000}
population=pd.Series(population_dict)
area_dict={'江苏':300000,'安徽':400000,'浙江':500000}
area=pd.Series(area_dict)
states=pd.DataFrame({'人口':population,'面积':area})
states.index
states.columns

pandas数据处理—Series、DataFrame对象
DataFrame是特殊的字典
DataFrame是一列映射一个Series的数据

states['人口']

pandas数据处理—Series、DataFrame对象
在NumPy的二维数组里,data[0]返回第一行,而在DataFrame中,data[‘col0’]返回第一列

创建DataFrame对象

(1)通过单个Series对象创建。DataFrame是一组Series对象的集合,可以用单个Series创建一个单列的DataFrame

pd.DataFrame(area,columns=['area'])

pandas数据处理—Series、DataFrame对象
(2)通过字典列表创建。任何元素是字典的列表都可以变成DataFrame

data=[{'a':i,'b':2*i} for i in range(3)]
pd.DataFrame(data)
#字典中有些键不存在,Pandas也会用缺失值NaN来表示
pd.DataFrame([{'a':1,'b':2},{'b':3,'c':4}])

pandas数据处理—Series、DataFrame对象
(3)通过Series对象字典创建

pd.DataFrame({'人口':population,'面积':area})

pandas数据处理—Series、DataFrame对象
(4)通过NumPy二维数组创建。假如有一个二维数组,就可以创建一个可以指定行列索引值的DataFrame。如果不指定行列索引值,行列默认都是整数索引值
pandas数据处理—Series、DataFrame对象
(5)通过NumPy结构化数组创建。
结构化数组是复合数据类型的

A=np.zeros(3,dtype=[('A','i8'),('B','f8')])
pd.DataFrame(A)

pandas数据处理—Series、DataFrame对象

Pandas的Index对象

Pandas的Index对象是数据结构,可以看作是不可变数组或有序集合,可以通过标准Python的取值方法获取数值,也可以通过切片获取数值。Index对象的不可变特征使得多个DataFrame和数组之间进行行索引共享时更加安全

ind=states.index
ind[1]
ind[:2]

pandas数据处理—Series、DataFrame对象

将Index看作有序集合

Pandas对象被设计用于实现许多操作,如连接(join)数据集,Index对象遵循Python标准库的集合(set)数据结构,包括并集、交集、差集

indA=pd.Index([1,3,5,7,9])
indB=pd.Index([2,3,5,7,11])
#交集
indA & indB
#并集
indA | indB

pandas数据处理—Series、DataFrame对象

数据取值与选择

Series数据选择方法

(1) 将Series对象看作字典

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

可以用Python字典的表达式和方法来检测键/索引和值

'a' in data
list(data.items())

Series对象可以用字典语法调整数据,通过增加新的键扩展字典一样,可以通过增加新的索引值扩展Series
pandas数据处理—Series、DataFrame对象
(2)将Series看作一维数组
Series不仅有着字典一样的接口,还具备和NumPy数组一样的数组数据选择功能,包括索引、掩码、花哨的索引等操作

将显式索引作为切片

使用显示索引做切片时,结果包含最后一个索引

将显式索引作为切片
data['a':'c']

pandas数据处理—Series、DataFrame对象

将隐式整数索引作为切片

当使用隐式索引做切片时,不包含最后一个索引

将隐式整数索引作为切片
data[0:2]

pandas数据处理—Series、DataFrame对象

掩码
data[(data>0.3) & (data<0.8)]

pandas数据处理—Series、DataFrame对象

花哨的索引
data[['a','e']]

pandas数据处理—Series、DataFrame对象

索引器loc、iloc和ix

pandas提供索引器属性来作为取值的方法

第一种索引器是loc属性,表示取值和切片都是显示的
data=pd.Series([0.25,0.5,0.75,1.0],index=['a','b','c','d'])
data.loc['a']
data.loc['a':'c']

pandas数据处理—Series、DataFrame对象

第二种是iloc属性,表示取值和切片都是Python形式的隐式索引
data.iloc[1]
data.iloc[1:3]

pandas数据处理—Series、DataFrame对象

第三种取值属性是ix,是前两种索引器的混合形式,在Series对象中ix等价于标准的[]取值方式。推荐使用loc和ilic

DataFrame数据选择方法

将DataFrame看作字典

把DataFrame当作一个由若干Series对象构成的字典

population_dict={'江苏':10000,'安徽':20000,'浙江':30000}
population=pd.Series(population_dict)
area_dict={'江苏':300000,'安徽':400000,'浙江':500000}
area=pd.Series(area_dict)
states=pd.DataFrame({'人口':population,'面积':area})

两个Series分别构成DataFrame的一列,可以通过对列明进行字典形式的取值获取数据

data['area']

可以用字典形式的语法调整对象,要增加一列可以这样做

states['密度']=states['人口']/states['面积']

pandas数据处理—Series、DataFrame对象

将DataFrame看作是二维数组

可以把DataFrame看成是一个增强版的二维数组,用values属性按行查看数组数据

states.values

pandas数据处理—Series、DataFrame对象
可以把许多数组操作方式用在DataFrame上,例如可以对DataFrame进行行列转置

states.T

pandas数据处理—Series、DataFrame对象
单个行索引获取一行数据

states.values[0]

pandas数据处理—Series、DataFrame对象
获取一列数据就需要向DataFrame传递单个列索引

states['人口']
进行数组形式取值时,就需要用到Pandas索引器loc、iloc和ix

通过iloc索引器,可以像对待NumPy数组一样索引Pandas的底层数组,DataFrame的行列标签会自动保留在结果中

#iloc是隐式索引
states.iloc[:2,:2]

pandas数据处理—Series、DataFrame对象

#loc是显示索引
states.loc[:'安徽',:'密度']

pandas数据处理—Series、DataFrame对象
任何用于处理NumPy形式数据的方法都可以用于这些索引器,例如,可以在索引器中结合使用掩码与花哨的索引方法

states.loc[states['人口']>20000,['面积','密度']]

pandas数据处理—Series、DataFrame对象
任何一种取值方法都可以用于调整数据

states.iloc[0,0]=1000000

pandas数据处理—Series、DataFrame对象

其他取值方法

掩码操作可以直接对每一行进行过滤,而不需要使用loc索引器

states[states['人口']>=30000]

pandas数据处理—Series、DataFrame对象

相关标签: Python