pandas数据处理—Series、DataFrame对象
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]
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对象看成一种特殊的Python字典,字典是一种将任意键映射到一组任意值的数据结构,Series对象其实是一种将类型键映射到一组类型值的数据结构。
可以直接用Python的字典创建一个Series对象,用字典创建Series对象时,其索引默认按照顺序排列
population_dict={'江苏':10000,'安徽':20000,'浙江':30000}
population=pd.Series(population_dict)
Series对象支持典型的字典数值获取方式,还支持数组形式的操作,比如切片
population['江苏']
population['江苏':'安徽']
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
DataFrame是特殊的字典
DataFrame是一列映射一个Series的数据
states['人口']
在NumPy的二维数组里,data[0]返回第一行,而在DataFrame中,data[‘col0’]返回第一列
创建DataFrame对象
(1)通过单个Series对象创建。DataFrame是一组Series对象的集合,可以用单个Series创建一个单列的DataFrame
pd.DataFrame(area,columns=['area'])
(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}])
(3)通过Series对象字典创建
pd.DataFrame({'人口':population,'面积':area})
(4)通过NumPy二维数组创建。假如有一个二维数组,就可以创建一个可以指定行列索引值的DataFrame。如果不指定行列索引值,行列默认都是整数索引值
(5)通过NumPy结构化数组创建。
结构化数组是复合数据类型的
A=np.zeros(3,dtype=[('A','i8'),('B','f8')])
pd.DataFrame(A)
Pandas的Index对象
Pandas的Index对象是数据结构,可以看作是不可变数组或有序集合,可以通过标准Python的取值方法获取数值,也可以通过切片获取数值。Index对象的不可变特征使得多个DataFrame和数组之间进行行索引共享时更加安全
ind=states.index
ind[1]
ind[:2]
将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
数据取值与选择
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
(2)将Series看作一维数组
Series不仅有着字典一样的接口,还具备和NumPy数组一样的数组数据选择功能,包括索引、掩码、花哨的索引等操作
将显式索引作为切片
使用显示索引做切片时,结果包含最后一个索引
将显式索引作为切片
data['a':'c']
将隐式整数索引作为切片
当使用隐式索引做切片时,不包含最后一个索引
将隐式整数索引作为切片
data[0:2]
掩码
data[(data>0.3) & (data<0.8)]
花哨的索引
data[['a','e']]
索引器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']
第二种是iloc属性,表示取值和切片都是Python形式的隐式索引
data.iloc[1]
data.iloc[1:3]
第三种取值属性是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['面积']
将DataFrame看作是二维数组
可以把DataFrame看成是一个增强版的二维数组,用values属性按行查看数组数据
states.values
可以把许多数组操作方式用在DataFrame上,例如可以对DataFrame进行行列转置
states.T
单个行索引获取一行数据
states.values[0]
获取一列数据就需要向DataFrame传递单个列索引
states['人口']
进行数组形式取值时,就需要用到Pandas索引器loc、iloc和ix
通过iloc索引器,可以像对待NumPy数组一样索引Pandas的底层数组,DataFrame的行列标签会自动保留在结果中
#iloc是隐式索引
states.iloc[:2,:2]
#loc是显示索引
states.loc[:'安徽',:'密度']
任何用于处理NumPy形式数据的方法都可以用于这些索引器,例如,可以在索引器中结合使用掩码与花哨的索引方法
states.loc[states['人口']>20000,['面积','密度']]
任何一种取值方法都可以用于调整数据
states.iloc[0,0]=1000000
其他取值方法
掩码操作可以直接对每一行进行过滤,而不需要使用loc索引器
states[states['人口']>=30000]
上一篇: 小程序 - 简单入门
推荐阅读
-
pandas数据处理—Series、DataFrame对象
-
pandas把dataframe转成Series,改变列中值的类型方法
-
从DataFrame中提取出Series或DataFrame对象的方法
-
Pandas:Series和DataFrame删除指定轴上数据的方法
-
pandas 对series和dataframe进行排序的实例
-
python pandas 对series和dataframe的重置索引reindex方法
-
Pandas:DataFrame对象的基础操作方法
-
Pandas基础(文件读取与写入、Series和Dataframe、常用基本函数、排序)
-
pandas把dataframe转成Series,改变列中值的类型方法
-
Numpy的ndarray和Pandas的Series和DataFrame类型的一些对比和理解