pandas的常用工具数据结构:Series和Dataframe
1 Series介绍
Series 是一维的数组型对象,它包含了一个值序列和数据标签(称为索引),最简单的序列由一个数组形成,可理解维是一个长度固定且有序的字典
基本使用
obj = pd.Series([4, 7, -5, 3]) obj obj.values #获取值 obj.index #获取索引范围,默认索引从0至N-1
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) #指定索引值(类似map) obj2 obj2.index obj2['a'] obj2['d'] = 6 #特定索引修改值 obj2[['c', 'a', 'd']] #据索引取值 obj2[obj2 > 0] #判断值范围,过滤 obj2 * 2 #乘积 np.exp(obj2) 'b' in obj2 #判断某值是否在数组 'e' in obj2
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} obj3 = pd.Series(sdata) #返回对应的数组 obj3 states = ['California', 'Ohio', 'Oregon', 'Texas'] obj4 = pd.Series(sdata, index=states) #将数组的索引替代,且经过了排序 obj4 pd.isnull(obj4) #判断数组值中是否有NaN的,返回布尔数组 (NaN为缺失数据) 等同于 obj4.isnull() pd.notnull(obj4) #判断数组值中是否没有NaN的,返回布尔数组 obj3 obj4 obj3 + obj4 #同key的累加,其中有一数组的无对应key,则返回空;与join *** 作相似 obj4.name = 'population' #添加数组的name属性 obj4.index.name = 'state' #添加数组索引的name属性 obj4
2 Dataframe介绍
Dataframe 表示的是矩阵的数据表,包含了已排序的列集合,每一列可以是不同的数据类型(数值、字符串、布尔值等),Dataframe既有行索引也有列索引,可视为一个共享相同索引的Series的字典。在Dataframe中,数据被存储为一个以上的二维块,而不是列表、字典或其他一维数组的集合
注意:从dataframe中选取的列是数据的视图,而不是拷贝,因此,对series的修改会映射到dataframe中,如需复制,则应当显式地使用series的copy方法
2.1 基本使用
最常用的构建方式是利用包含等长度列表或numpy数组的字典来形成dataframe
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002, 2003], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]} frame = pd.Dataframe(data) #定义dataframe的数据,会自动分配索引,并排序 frame
frame.head() #获取数据表的头部的5行 pd.Dataframe(data, columns=['year', 'state', 'pop']) #按照指定列的排序 2.2 基于行列 *** 作 frame2 = pd.Dataframe(data, columns=['year', 'state', 'pop', 'debt'],index=['one', 'two', 'three', 'four','five', 'six']) #指定源数据data,指定列名顺序,指定行索引,且指定的列名不存在,则会补充缺失值 frame2 frame2.columns #获取列名 frame2['state'] #取对应列的值 方法1(任意列名均有效) frame2.year #取对应列的值 方法2(仅在是python有效变量名时有效) frame2.loc['three'] #获取指定行 frame2['debt'] = 16.5 #指定列赋固定值 frame2 frame2['debt'] = np.arange(6.) #指定列赋范围值 frame2 val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five']) frame2['debt'] = val #指定列,赋Series有对应索引的值 frame2 frame2['eastern'] = frame2.state == 'Ohio' #添加列,并指定对应值,赋值时长度必须一致 #注意 frame2.eastern的语法无法创建新的列 frame2 del frame2['eastern'] #删除列 frame2.columns 2.3 嵌套字典数据 pop = {'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}} frame3 = pd.Dataframe(pop) #将嵌套的字典,作为行显示 frame3 frame3.T #转置数据表 pd.Dataframe(pop, index=[2001, 2002, 2003]) 2.4 截取serise的字典部分数据 形成dataframe pdata = {'Ohio': frame3['Ohio'][:-1],'Nevada': frame3['Nevada'][:2]} pd.Dataframe(pdata) #截取部分数据表的数据 frame3.index.name = 'year'; frame3.columns.name = 'state'#添加name属性 frame3 frame3.values #取数据表的值 frame2.values #若dataframe包含不同的数据类型,则value的dtype会自动现在合适列的类型
3 Dataframe构造函数的有效输入
(1)2D ndarray : 数据的矩阵,行和列的标签是可选参数
(2)数组、列表和元组构成的字典 : 每个序列成为dataframe的一列,所有的序列必须等长
(3)numpy结构化/记录化数组:与数组构成的字典一致
(4)series构成的字典:每个值成为一列,每个series的索引联合起来形成结果的行索引,也可显示地传递索引
(5)字典或series构成的列表:列表中的一个元素形成dataframe的一行,字典或series索引联合起来形成dataframe的列标签
(6)其他dataframe:如不显示传递索引,则会使用原索引
(7)其他的一些字典或列表或数组等
本篇知识点参考《利用python进行数据分析》,更多知识请阅读原书
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)