直接上知识点
一、
1、新建数据框时建立索引
所有的数据框默认都已经使用从 0 开始的自然数索引,因此这里的"建立”索引指的是自定
df = pd.DataFrame( {'varl' : 1.0, ' var2' :[1,2,3,4], 'var3' :['test','python','test','hello'] , 'var4' : 'cons'} , index =[0,1,2,3])
如上部代码所示,创建一个二维数组,其列名为var1,var2,var3,var4,其索引值为0,1,2,3,
因为在创建数据帧时,使用了字典来指定每列的值,在字典中,如果我们只提供了一个值而不是一个列表或数组,那么这个值将被复制到每一行中的相应列。所以'varl':1.0,被复制到了一整列,'cons'这个值也被复制到了var4列的每一行。
其输出结果如图:
2、指定某列为索引列
其使用方法如下:
df.set_index(keys :被指定为索引的列名,复合索引用 list:格式提供drop = True :建立索引后是否删除该列append = False :是否在原索引基础上添加索引,默认是直接替换原索引inplace = False :是否直接修改原数据框 )
例如下列这个例子:
id1=pd.Series([1,2,3,4,5])
id2=pd.Series([5,6,4,12,7])
df=pd.DataFrame({'id':id1,'age':id2})
new_df=df.set_index(keys=['id','age'],drop=False)new_df=df.set_index(keys=['id'],append=True)
首先建立两个类似一维数组的列表,然后将这两个列表通过DateFrame链接成一个二维数组,之后再通过new_df=df.set_index(keys=['id','age'],drop=False)这串代码中的df.setindex更改索引,其中key指定了id和age两列作为索引列,然后通过drop=False来保留原列,默认是删除,使其id和age这两列不仅成为了索引,而且还多出来两列当做内部元素,其打印结果如下图1,然后new_df=df.set_index(keys=['id'],append=True)代码是对df中指定id这一列为索引,而append则是决定是否在处理好的元素上再增加一个从零开始的索引列,默认是替换原索引。
图1: 图2:
3、将索引还原变量列
用法如下:
df.reset_index(drop = False :是否将原索引直接删除,而不是还原为变量列inplace = False :是否直接修改原数据框)
看实例:
id1=pd.Series([1,2,3,4,5])
id2=pd.Series([5,6,4,12,7])
df=pd.DataFrame({'id':id1,'age':id2})
df.set_index (['id','age'])
即是直接将df中的两列数组变成索引列,其得到的结果为:
3.1 将索引全部还原为变量
即将原索引增加一列列名为index的列到原数组,然后外面重新定义了一个从0开始的索引
df.reset_index ()
其打印结果如图所示:
3.2 是否删除 index 列
df.reset_index (drop=True)
默认drop=False,则为上图所示状态,改为True则删除上图中的index列
4、引用和修改索引
注意:索引也是有储存格式的,需要区分数值型和字符串型的引用方式
df.index:查看索引
4.1 修改索引
本质上和变量列名修改方式相同
如下代码所示即为指定索引列名称为sno
df = pd.DataFrame({'name':['zs','ls','ww'],'level':['vip1','vip2','pm']})
df.index.name='sno'
上示代码结果为:
df2 = pd.read_excel('stu_data.xlsx')
df3 = df2.set_index(keys = '学号')
这里即为导入一个xlsx文件,然后指定其中的列名为‘学号’的列为索引
df4 = pd.read_excel('stu_data.xlsx')
df5 = df2.set_index(keys = ['学号','性别'])
# df5.index.names = ['no','sex']
df5.index.names=[None,None]
df5
df4读取一个文件,df5为指定其中的两列为索引列,然后再通过index.names更改索引列名称
4.2 修改索引值
修改的本质上就是全部替换
df1.index = ['a', 'b', 'c']
5、更新索引
reindex 则可以使用数据框中不存在的数值建立索引,并据此扩充新索引值对应的索引行/列,同时进行缺失值填充操作。
df.reindex(labels :类数组结构的数值,将按此数值重建索引,非必需copy = True :建立新对象而不是直接更改原 df/series 缺失数据的处理方式method :针对已经排序过的索引,确定数据单元格无数据时的填充方法,非必需pad / ffill:用前面的有效数值填充backfill / bfill:用后面的有效数值填充nearest:使用最接近的数值逬行填充fill_value = np.NaN :将缺失值用什么数值替代limit = None :向前/向后填充时的最大步长)
代码演示:
代码1:指定行索引,打印索引内的内容
import pandas as pd
df = pd.DataFrame({'name':['zs','ls','ww'],'level':['vip1','vip2','pm']})
df.reindex([0,1,3])
定义数组后,用reindex更改索引值为0,1,3,
注意:此时更改了索引值,即只打印这个索引的内容,如果索引没有数据,则打印NaN
代码2:从上一行填充
df.reindex([0,1,2,3],method='ffill')
打印指定索引0,1,2,3的内容,如果没有数据则直接填充上一行的数据
代码3:指定填充代码
df.reindex([0,1,2,3],fill_value="test")
没有值的位置填充指定值:
6、Series的索引和切片
6.1 索引
import numpy as np
import pandas as pd
data=pd.Series([4,3,25,2,3],index=list('abcde'))
data['a'] #根据key获取,其打印结果为4
data[1] #索引获取,其打印结果也是4
data[-1]#打印结果为3
6.2 切片
如果索引与行名相同都是1,这时候就不知道是按照哪个来获取,所以获取时候使用loc、iloc
import numpy as np
import pandas as pd
data=pd.Series([4,3,25,2,3],index=list('abcde'))
# data['a':'d'] #其打印结果为带索引名的值为,4,3,25,2
data[2:4] #索引切片,打印带索引名称的值,为25,2
# data[-3:-1] #从后往前取值
data[data>3] #布尔取值,取列中的大于3的值所对应的行
6.3 loc与iloc的使用
data=pd.Series([5,3,2,5,9],index=[1,2,3,4,5])
data.loc[1] #指定名称型索引
data.iloc[1] #指定数值的索引