醒醒,别睡了...讲《数据分析pandas库》了—/—<3>

直接上知识点

一、

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,这时候就不知道是按照哪个来获取,所以获取时候使用lociloc

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 lociloc的使用
data=pd.Series([5,3,2,5,9],index=[1,2,3,4,5])
data.loc[1] #指定名称型索引
data.iloc[1] #指定数值的索引

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜就多练_0828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值