Python_dataframe索引

本文介绍了如何使用Pandas DataFrame进行数据索引,包括直接索引、iloc和loc的用法,并通过示例展示了如何筛选特定条件的行。此外,还提供了一个用于绘制效率Map图的完整代码,涉及数据预处理、插值和等高线图的绘制。
摘要由CSDN通过智能技术生成

前言:

在绘制效率map图的时候,处理表格数据时刚好又用到了对于dataframe索引的语句,我每次都弄混了(捂脸),今天借这个机会刚好做一次梳理,也方便之后查取。文末会附上map图绘制的代码,作为附带补充吧。

正文:

先生成一个dataframe吧。随便啥都行。

 data = pd.DataFrame([nlist, tlist, effi])
 data=data.T
 data.rename(columns = {0:'nlist',1:'tlist',2:'effi'},inplace = True)            #列赋新的名字,便于操作

其中nlist,tlist,effi是之前生成的三个列表,数据并不重要,主要是记录操作。然后利用rename函数对dataframe赋列名。方便之后调用。给个前四行的数据吧:

 先补充一个列表去重函数,得到列表不重复的值,输入原列表,返回的是去重后的列表。实现过程比较简单,不说明了。这个是因为画map时会用到,跟本文的主题其实没啥关系。

def delexcess(operlis):
    newlist=[]
    for i in operlis:
        if i not in newlist:
            newlist.append(i)
    return newlist

主要分别loc和iloc这两个语句,顺带记录一下我常用的对列名的直接索引方式。

先是直接索引,简单粗暴:

就很简单,根据列名来访问,这也是为啥之前要利用rename函数的原因。

然后是iloc,iloc利用index的具体位置,简单地说就是index=?给的是多少就索引对应的那一行。

这就把index=1的那一行给索引出来了。 也支持切片操作(左闭右开)的:

loc利用index的名称,来获取想要的行。这边由于我们的index索引就是数字,所以结果是一样的。

这里利用判断nlist的值来进行举例,比如我向想把nlist=500的对应行全部筛选出来,这个时候用iloc就不行,iloc只识别整数型的索引(行或者列都是整数),所以在筛选时,我们用loc:

loc对于名称和True,False都是可以接受的。

附加代码 

map图的绘制,加上之前的一些数据预处理,稍微记录一下。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy.interpolate as si    #做差值处理
import seaborn as sns
sns.set(style='darkgrid')

def interp_map(nlist, tlist, effi):
    ns = delexcess(nlist)
    ts = list(np.linspace(0,max(tlist),300))
    data = pd.DataFrame([nlist, tlist, effi])
    data=data.T
    data.rename(columns = {0:'nlist',1:'tlist',2:'effi'},inplace = True)            #列赋新的名字,便于操作
    e_map = np.zeros((len(ns),len(ts)))                                             #效率差值的存储空间
    for i in range(0,len(ns)):
        for j in range(0,len(ts)):
            subdata = data.loc[data['nlist']==ns[i]]
            f = si.interp1d(subdata['tlist'],subdata['effi'],kind='linear')
            try:
                e_map[i,j] = f(ts[j])
            except:
                e_map[i,j] = np.nan
    
    return ns, ts, e_map

ns, ts, e_map = interp_map(nlist, tlist, effi)

xx,yy=np.meshgrid(ns,ts) # X,Y分别转换为一个二维数组
figure=plt.figure('contour',facecolor='lightgray')
plt.title('Motor Efficiency \n Presented by matplotlib', fontsize=12)
plt.xlabel('Speed', fontsize=12)
plt.ylabel('Torque', fontsize=12)
cntr=plt.contour(xx, yy, e_map.T, 15, colors='black',linewidths=0.2)  #绘制等高线
plt.clabel(cntr, fmt='%.2f', fontsize=8,manual=False)       #等高线数字注释
plt.contourf(xx, yy, e_map.T, 15, cmap='jet',alpha=0.9)     #等高线之间的颜色填充
plt.colorbar(label='Efficiency difference(%)')              #显示颜色的柱状图
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值