irpas技术客

DataFrame,pandas索引,重置索引_二十滴水_pandas更新索引

网络投稿 4495

3.1.2 DataFrame

DataFrame是一个类似于二维数组或表格的对象,它每列的数据可以是不同的数据类型。与Series的结构相似,DataFrame的结构也是有索引和数据组成的,不同的是,DataFrame的索引不仅有行索引,还有列索引

可以使用一下构造方法创建:

pandas.DataFrame(data=None, inedx=None,columns=None, dtype=None,copy=False)

其中常用参数所表示的含义 参数 含义 Index 行标签,如果没有传入索引参数,则默认会自动创建一个0~N的整数索引 Columns 列标签,如果没有传入索引参数,则默认会自动创建一个0~N的整数索引

例1:

import numpy as np import pandas as pd demo_arr=np.array([['a', 'b', 'c'], ['d', 'e', 'f']])#创建数组 df_obj = pd.DataFrame(demo_arr) print(df_obj)

例2:创建DataFrame对象,指定列索引

df_obj1 = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3']) print(df_obj1)

例3:获取列索引为“No2”的一列数据

element = df_obj1['No2']#通过列索引的方式获取一列数据 print(element) print(type(element))#查看返回结果的类型

例4:使用访问属性的方式,获取属性为No2的一列数据

element = df_obj1.No2 print(element) print(type(element))#查看返回结果的类型

注意:在获取DataFrame的一列数据时,推荐使用列索引的方式完成,主要是因为在实际使用中,列索引的名称中很有可能带有一些特殊符号(如空格),这时使用“点字符”进行访问就显得不太合适了

为DataFrame添加一列数据,则可以通过给列索引或者列名称赋值的方式实现,类似于给字典增加键值对的操作。不过,新增的长度必须与其他的列的长度保持一致,否则会出现ValueError异常。

例1:增加No4一列数据

df_obj1['No4'] = ['g', 'h'] print(df_obj1)

例2:删除某一列数据,则可以使用del语句实现

del df_obj1['No3'] print(df_obj1) 3.2 pandas索引操作及高级索引 3.2.1 索引对象

Pandas中的索引都是index类对象,又称为索引对象,该对象是不可以进行修改的,以保障数据的安全

示例代码:创建series类对象,为其指定索引,然后在对索引重新赋值

import pandas as pd ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e']) ser_index = ser_obj.index print(ser_index)

2)

import pandas as pd ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e']) ser_index = ser_obj.index print(ser_index) ser_index['2'] = 'cc' print(ser_index)

Index类对象的不可变特性是非常重要的,多个数据结构之间才能安全地共享inedx类对象 例:创建两个共用同一个index对象的series类duixiang

import pandas as pd ser_obj1 = pd.Series(range(3), index=['a', 'b', 'c']) ser_obj2 = pd.Series(['a', 'b', 'c'], index=ser_obj1.index) print(ser_obj2.index is ser_obj1.index) print(ser_obj2) print(ser_obj1)

常见的pandas提供的index对象子类 对象 描述 Int64Index 针对整数的特殊index对象 MultiIndex 层次化索引,表现单个轴上的多层索引 DatetimeIndex 存储纳秒寄时间戳

3.2.2 重置索引

Reindex( )是pandas提供的重要方法,起作用是对原索引和新索引进行匹配,也就是说,新索引含有原索引的数据,而原索引数据按照新索引排序。如果新索引中没原索引数据,那么程序不仅不会报错还会添加新索引,并将之填充为NaN或者使用fill_vlues( )填充其他值

语法:

DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)

语法参数的含义 参数 含义

Index用作索引的新序列Method插值填充方式Fill_value引入缺失值使用的替换值limit向前或向后填充时的最大填充量

例:

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

#重新索引

ser_obj2 = ser_obj.reindex(['a', 'b', 'c', 'd', 'e', 'f']) print(ser_obj2)

注:使用reindex()方法对索引重新排列,变为“a,b,c,d,e,f”由于索引“f”对应的值不存在,所以使用NaN对确实的数据进行不填充

也可使用fill_value参数来指定缺失值:

import pandas as pd ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e']) ser_obj2 = ser_obj.reindex(['a', 'b', 'c', 'd', 'e', 'f'], fill_value=6) print(ser_obj2)

注:fill_value()参数会让所有缺失数据都填充为同一个值

如果期望使用相邻的元素值(前边或者后边元素的值)进行补充,则可以使 用method参数 Method参数的可用值

参数说明Ffill或者pad前向填充值Bfill或者backfill后向填充值nearest从最近的索引值填充

Method参数示例: 1)创建Series对象,并为其指定索引

import pandas as pd ser_obj3 = pd.Series([1, 3, 5, 7], index=[0, 2, 4, 6]) print(ser_obj3)

2)重新索引,前向填充值

3.2.3 索引操作

1.Series类对象属于一维结构,他只有行索引,而DataFrame类属于二维结构,同时拥有行索引和列索引

Series有关索引的用法类似于Numpy数组索引,只不过series的索引值不只是整数。可以通过索引的位置来获取,也可以使用索引名称来获取

例:

import pandas as pd ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e']) print(ser_obj[2]) #使用索引位置获取数据 print(ser_obj['c']) #使用索引名称获取数据

Series也可以使用切片来获取数据,不过如果使用的是位置索引来进行切片,则切片结果和list切片类似,既包含起始位置但不包含结束位置:如果使用索引名称进行切片,则切片结果是包含结束位置的 例:

print(ser_obj[2: 4]) #使用位置索引进行切片 print(ser_obj['c': 'e'])#使用索引名称进行切片

如果希望获取的是不连续的数据,则可以通过不连续索引来实现 例:

print(ser_obj[[0, 2, 4]]) #通过不连续位置索引获取数据集 print(ser_obj[['a', 'c', 'd']])#通过不连续索引名称获取数据集

布尔型索引同样适用于pandas,具体用法跟数组的用法一样,将布尔型的数组索引作为模板筛选数据,返回与模板中True位置对应的元素代码如下:

ser_bool = ser_obj > 2 #创建结果为True的数据 print(ser_bool) print(ser_obj[ser_bool])#获取结果为True的数据 2.DataFrame的索引操作

DataFrame结构既包含行索引也包含列索引。其中行索引是通过index属性进行获取的, 列索引是通过columns属性进行获取的索引的结构 ,DataFrame中每列数据都是一个series对象,我们可以通过使用列索引进行获取,代码如下:

import pandas as pd import numpy as np arr = np.arange(12).reshape(3, 4) #创建DataFrame对象,并为其指定列索引 df_obj = pd.DataFrame(arr, columns=['a', 'b', 'c', 'd']) print(df_obj) print(df_obj['b'])#获取b列的数据 print(type(df_obj['b']))

如果要从DataFrame中获取多个不连续的series对象,则同样可以使用不连续索引进行实现,代码如下:

print(df_obj[['b', 'd']])#获取不连续的series对象 print(df_obj[ : 2])#使用切片获取第0~1行的数据 #使用多个切片先通过行索引获取第0~2行的数据 #再通过不连续列索引获取第b,d列的数据 print(df_obj[ :3] [['b', 'd']])


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #pandas更新索引 #312 #inedxNone #columnsNone