Panadas 中利用DataFrame对象的.loc[,]、.iloc[,]方法抽取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Panadas 中利用DataFrame对象的.loc[,]、.iloc[,]方法抽取数据相关的知识,希望对你有一定的参考价值。

参考技术A

pandas的DataFrame对象,本质上是 二维矩阵 ,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的 名称 。这样内部数据抽取既可以用“ 行列名称(对应.loc[]方法) ”,也可以用“矩阵下标( 对应.iloc[]方法 )”两种方式进行。
下面具体说明:
(以下程序均在Jupyter notebook中进行,部分语句的print()函数省略)
首先生成一个DataFrame对象:

DataFrame对象生成时除了必须指定data参数外,用户还可以指定两个参数columns(列名)和index(行名,注意这里的index不仅可以是数字,也可以是用户指定的任何数据类型,如字母), 如果不指定,则行列名默认都采用0、1、2……
下图说明了前面的情况:

.loc[行标签名/[行标签名list],列标签名/[列标签名list]],即有两个输入参数,第一个指定行名,第二个指定列名。当只有一个参数时,默认是行名(即抽取整行),所有列都选中。

.loc[行位置/[行位置list],列位置/[列位置list]],也有两个输入参数,第一个指定行位置,第二个指定列位置。当只有一个参数时,默认是行位置(即抽取整行),所有列都选中。

上述.loc[]和.iloc[]都只接收了1个参数“语文”或者“0”,因此默认都表示行信息,而列则全部被选中,即抽取\'语文\'这整一行数据。\',\'表示将两个参数隔开(如果有两个参数的话),\':\'这里表示选择中所有列。当只有一个输入参数时,python默认\',\'和\':\'既可写上也可省略。注意:参数[\'语文\']或[0]中只有一个对象时(即只有一行),[]也可以省略,如果有多个对象(即多行)则必须加上[]。此外还需注意,加上[]表示抽取的结果无论是一个数据,一行数据,还是一列数据,他都是DataFrame对象;不加[]时,如果选中的是一行或者一列数据,则是Series对象,如果是一个单独的数据,则是该数据本身的类型。

例2和例1唯一的差别是,第一个参数指定了多行一起输出,此时必须用[]将各行名或者下标括起来,否则出错。后面的\',\'和\':\'同例1,可省略。注意:原始数据的行顺序是:语文、数学、英语、政治,这里的提取顺序是[\'英语\',\'语文\',\'政治\'],而输出也是\'英语\',\'语文\',\'政治\',可见输出顺序和参数指定顺序是一致的,而非按原始顺序输出。

例3依然是接受1个参数,列参数没有,后面的\',\'和\':\'同例1,可省略。连续参数用‘start:end’的方式指定行范围。注意:这里不能用[]将其括起来,否则出错。此外用行列名连续取值时,比如[\'语文\':\'政治\']会把\'政治\'所在行也取出来,而利用矩阵下标时,0:3只取0,1,2对应的三行,最后一行不会取出;但是如果行列标签名本身就是整数0,1,2……,而不是文字或者其他类型,那么在使用连续行列标签名取数据时,最后一行或者列是不会被取出的。

抽取整列的方式跟抽取整行在参数设置上完全一样。.loc[]和.iloc[]两个方法默认列为第二个参数, 因此抽取整列时,都必须带上\':,\'作为区分前面行参数的‘分隔符’,否则出错

同时抽取分部行和列的情况,就是把上述单独抽取行和列的方式合并起来用。抽取整个DataFrame对象则是.loc[:,:]或.iloc[:,:],虽然这么做没啥意义。

(1)DataFrame对象的.loc[,]和.iloc[,]方法用于抽取数据,.loc[,]用行列的标签名作为参数,.iloc[,]用二维矩阵元素的网格下标作为参数。
(2)两个方法都接受两个参数,第一个是“行标签”或者“矩阵行号”,第二个是“列标签”或者“矩阵列号”。
(3)两种方法当只指定一个输入参数时,都默是跟“行”相关,而“列”则全部被选中。如何行和列都需要指定时,中间用“逗号,”隔开,这非常重要,否则出错。
(4)当需要选中所有行的某几列时,行参数可以省略,列参数需要指定,此时列参数前面必须带上“,:”,形如.loc[:,列参数],.iloc[:,列参数]。
(5).loc[,]和.iloc[,]设置了一个还是两个输入参数,关键看有没有“,”将两个参数分开,且要区分逗号是一个参数的内部逗号,还有用于分隔行列参数的逗号。
(6)对于两个参数的概念区分,.loc[\'语文\',\'数学\']这表示输入了两个参数,行参数是‘语文’,列参数是‘数学’,对于上面的表格而言这是错的,因为没有叫‘数学’的列,应写为[[\'语文\',\'数学\']],即‘数学’也是行参数的一部分,[\'语文\',\'数学\']整体作为一个行参数,这里的逗号不是用以分隔行和列,仅仅是行list里面的逗号。[[\'语文\',\'数学\']]=[[\'语文\',\'数学\'],]=[[\'语文\',\'数学\'],:],都表示只有一个行参数,列全部选中。

Pandas---10.DataFrame绘图

1.matplotlib是一种比较低级的工具,pandas中有许多利用DataFrame对象数据组织特点来创建标准图表的高级绘图方法。

2.Series/DataFrame.plot():绘制图形。

Series.plot(kind=‘line‘, ax=None, figsize=None, use_index=True, title=None, grid=None,
  legend=False, style=None, logx=False, logy=False,loglog=False,xticks=None,yticks=None,
  xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, 
  xerr=None, label=None, secondary_y=False, **kwds)
  DataFrame.plot(x=None, y=None, kind=‘line‘, ax=None, subplots=False, sharex=None, 
  sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, 
  legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, 
  yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None,
  table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds)

参数:

  • kind:绘制的类型。可以为:‘line‘‘bar‘‘barh‘(水平的bar)、‘hist‘‘box‘‘kde‘(核密度估计)、‘density‘(类似kde)、‘area‘‘pie‘
  • ax:一个Axes实例对象。如果为空,则是plt.gca()的返回值(当前Axes
  • figsize:一个元组,指定图片大小(单位为英寸)
  • use_index:一个布尔值。如果为True,则使用index作为X轴。
  • title:图形的标题
  • grid:一个布尔值。如果为True,则开启网格
  • legend:一个布尔值,如果为True,则放置图例
  • style:一个列表或者字典,给出了每一列的线型
  • logx:一个布尔值,如果为True,则x轴为对数型
  • logy:一个布尔值,如果为True,则y轴为对数型
  • loglog:一个布尔值,如果为True,则x轴和y轴都为对数型
  • xticks:一个序列,用于给出xticks
  • yticks:一个序列,用于给出yticks
  • xlim:一个二元的元组或者序列,给出x轴范围
  • ylim:一个二元的元组或者序列,给出y轴范围
  • rot:一个整数,给出了x轴和ytick旋转角度(不是弧度)。
  • fontsize:一个整数,给出了xtick/ytick的字体大小
  • colormap:一个字符串或者colormap对象,给出了colormap
  • colorbar:一个布尔值。如果为True,则绘制colorbar(只用于scatterhexbin图中)
  • position:一个浮点数。给出了bar图中,各bar的对其位置(0表示bar的左侧与它的坐标 对其;1表示bar的右侧与它的坐标对其)
  • layout:一个元组。给出了(rows,columns)
  • table:一个布尔值或者Series/DataFrame。如果为True,则将本Series/DataFrame绘制为一个表格;如果为Series/DataFrame,则将该参数绘制为表格
  • yerr:用于绘制Error Bar
  • xerr:用于绘制Error Bar
  • labelplotlabel参数
  • secondary_y:一个布尔值或者一个整数序列。如果为True,则y轴绘制在右侧
  • mark_right:一个布尔值,如果为Truesecondary_y=True,则在图例中标记为right
  • kwds:传递给matplotlib中的plot函数的其他关键字参数

DataFrame.plot中,下面的参数意义为:

  • xlabel或者position
  • ylabel或者position
  • subplots:一个布尔值,如果为True,则将每一列作为一个子图来绘制
  • sharex:一个布尔值。如果为True,且subplots=True,则子图共享x
  • sharey:一个布尔值。如果为True,且subplots=True,则子图共享y
  • stacked:一个布尔值。在bar中,如果为True,则将柱状图堆积起来
  • sort_columns:一个布尔值。如果为True,则根据列名来决定绘制的先后顺序。

它们返回的是AxesSubplot对象,或者AxesSubplotndarray

以上是关于Panadas 中利用DataFrame对象的.loc[,]、.iloc[,]方法抽取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Pandas Dataframe 的形状(带有“L”的行号)?

R中未找到DataFrame对象错误

RDD转换为DataFrame

Pandas---10.DataFrame绘图

Pandas Dataframe 中的回收利用

我是不是必须明确使用 Dataframe 的方法才能利用 Dataset 的优化? [复制]