数据框索引:

基于数据框本身提取

subset函数

filter+select函数

Python:

数据框自身的方法

ix方法

loc方法

iloc方法

query方法

数据框自身的方法

ix方法

loc方法

iloc方法

query方法

----------------

R语言:

------------------

library(ggplot2)

library(ggplot2)

我使用ggplot2内置的mpg数据集来进行案例演示,数据框可以通过方括号传入行列下标的方式筛选各种符合条件的取值范围。

取列可以直接使用列号,或者使用列名:

mpg[,c(2,3)]

mpg[,c("model","displ")]

mpg[,c(2,3)]

mpg[,c("model","displ")]

mpg$model 等价于 mpg[,"model"] #取单列时两种方法等价,但是第二种方法会自动降维(编程一个向量)。

mpg$model 等价于 mpg[,"model"] #取单列时两种方法等价,但是第二种方法会自动降维(编程一个向量)。

行切片:(行切片同样可以使用行号:)

mpg[1:10,]

mpg[1:10,]

通常情况下这种取值是没有任何意义的,行索引最常用的场景是用于条件索引,来基于分类字段筛选数据子集。

基于数据框本身的条件索引:

mpg[mpg$model=="audi" | mpg$manufacturer=="mercury",] #或条件

mpg[mpg$model=="a4" & mpg$manufacturer=="audi",] #且条件

mpg[mpg$model=="audi" | mpg$manufacturer=="mercury",] #或条件

mpg[mpg$model=="a4" & mpg$manufacturer=="audi",] #且条件

以上索引是在没有借助任何外部函数的基础上,通过数据框自身的规则完成的,很不优雅,因为写了很多重复的名称。

一种更优雅的方式是使用subset函数进行行列筛选。

subset(mpg,model=="audi"| manufacturer=="mercury",select=c("model","manufacturer","year"))

subset(mpg,model=="a4" & manufacturer=="audi",select=c("model","manufacturer","year"))

subset(mpg,model=="audi"| manufacturer=="mercury",select=c("model","manufacturer","year"))

subset(mpg,model=="a4" & manufacturer=="audi",select=c("model","manufacturer","year"))

subset函数主要接受三个参数,数据框名称,筛选行,select筛选列。或与且得逻辑表达与上述案例一致。

还有一种更加高级优雅得方式是使用dplyr包中的select和filter函数进行行列索引与切片。

library(dplyr)

mpg%>%filter(model=="audi"| manufacturer=="mercury")%>%select(model,manufacturer,year)

mpg%>%filter(model=="a4" & manufacturer=="audi")%>%select(model,manufacturer,year)

library(dplyr)

mpg%>%filter(model=="audi"| manufacturer=="mercury")%>%select(model,manufacturer,year)

mpg%>%filter(model=="a4" & manufacturer=="audi")%>%select(model,manufacturer,year)

再高级一点儿的切片与索引方法有木有呢,当然有了,datatable包把所有的数据框索引与切片功能参数全都封装到了数据框内部,不过鉴于datatable语法对于初学者会引起不适,而且我平时使用的也比较少,只懂一些皮毛,感性的话,可以自行扩展学习,以上切片与索引方式最足够你完成数据分析工作中的所有切片索引需求。

--------------

Python:

--------------

为了保持与R语言的案例数据演示一致,我把刚才在R语言中使用的数据复制一份导入Python中。

write.table (mpg,"C:/Users/RAINDU/Desktop/mydata.csv",sep=",",row.names=FALSE) #R代码

write.table (mpg,"C:/Users/RAINDU/Desktop/mydata.csv",sep=",",row.names=FALSE) #R代码

import os

import pandas as pd

import numpy as np

os.chdir("C:/Users/RAINDU/Desktop/")

mydata = pd.read_csv("mydata.csv",sep = ",",encoding = "utf-8")

import os

import pandas as pd

import numpy as np

os.chdir("C:/Users/RAINDU/Desktop/")

mydata = pd.read_csv("mydata.csv",sep = ",",encoding = "utf-8")

#数据预览与描述:

mydata.head()

mydata.describe()

mydata.head()

mydata.describe()

Python中提取列的规则与R语言中极其相似:

提取单行的两种等价方式:

mydata.model #在R语言中应该写mydata$model

mydata["model"] #在R语言中应该写mydata[,"model"]或者mydata["model"]

mydata.model #在R语言中应该写mydata$model

mydata["model"] #在R语言中应该写mydata[,"model"]或者mydata["model"]

如果是多列则中括号内指定列名组成的列表:

mydata[["model","manufacturer"]]

mydata[["model","manufacturer"]]

通过指定序号范围来提取行:

mydata[1:10] #默认情况下序列范围是针对行切片(字符串默认则是针对列索引)

mydata[200:] #切出201个之后的所有记录(Python的数据类型默认从0开始编号)

mydata[:100] #切出前一百个的所有记录(默认从0开始,不包含尾部)

mydata[:] #默认提取所有的数据记录

mydata[::2] #默认隔几个单位取一次值

mydata[1:10] #默认情况下序列范围是针对行切片(字符串默认则是针对列索引)

mydata[200:] #切出201个之后的所有记录(Python的数据类型默认从0开始编号)

mydata[:100] #切出前一百个的所有记录(默认从0开始,不包含尾部)

mydata[:] #默认提取所有的数据记录

mydata[::2] #默认隔几个单位取一次值

数据框可以同时叠加行列索引与切片:

mydata[1:10][["model","manufacturer"]]

mydata[["model","manufacturer"]][1:10]

mydata[1:10][["model","manufacturer"]]

mydata[["model","manufacturer"]][1:10]

至于行切片与列索引的先后顺序其实是无关紧要的。

除了基于数据框本身的这种简单筛选之外,Python的数据框还提供很灵活的索引方式:

#标签索引:(针对数据框的索引字段)

mydata.loc[3] #按索引提取单行的数值

mydata.loc[0:5] #按索引提取区域行数值

mydata.loc[1:10,["model","manufacturer"]] #行列同时索引

mydata.loc[3] #按索引提取单行的数值

mydata.loc[0:5] #按索引提取区域行数值

mydata.loc[1:10,["model","manufacturer"]] #行列同时索引

如果标签列是字符串或者日期,则使用同样的规则,文本需要 添加单引号 或者双引号。

#位置索引:(只针对行列位置对应的序号)

mydata.iloc[[0,2]] 等价于mydata.iloc[[0,2],:]

mydata.iloc[1:] 等价于mydata.iloc[1:,:]

mydata.iloc[1,[0,1]]

mydata.iloc[:3,:2]

mydata.iloc[[0,2,5],[4,5]]

mydata.iloc[[0,2]] 等价于mydata.iloc[[0,2],:]

mydata.iloc[1:] 等价于mydata.iloc[1:,:]

mydata.iloc[1,[0,1]]

mydata.iloc[:3,:2]

mydata.iloc[[0,2,5],[4,5]]

#iloc索引的位置,平时使用是意义不大,只是需要理解其数字和字符串的指定规则,如果只需要提取行的话,列位置可以忽略或者使用“:”占位,如果仅仅是提取列规则,保留所有行的话,则行位置必须提供占位,否则会被当做行索引。

位置与标签混合索引(ix函数):

#使用ix按索引标签和位置混合提取数据

df_inner.ix[:,:]

#使用ix按索引标签和位置混合提取数据

df_inner.ix[:,:]

指定规则就是可以同时在行列参数指定位置灵活的提供位置参数和标签参数(因本例使用的默认的数字索引字段,没有设置索引标签)。

条件索引:

mydata[(mydata["model"]=="audi") | (mydata["manufacturer"]=="mercury")][["model","manufacturer","year","class"]]

mydata[(mydata["model"]=="a4") & (mydata["manufacturer"]=="audi")][["model","manufacturer","year","class"]]

mydata[(mydata["model"]=="audi") | (mydata["manufacturer"]=="mercury")][["model","manufacturer","year","class"]]

mydata[(mydata["model"]=="a4") & (mydata["manufacturer"]=="audi")][["model","manufacturer","year","class"]]

mydata.loc[(mydata["model"]=="audi") | (mydata["manufacturer"]=="mercury"),["model","manufacturer","year","class"]]

mydata.loc[(mydata["model"]=="a4") & (mydata["manufacturer"]=="audi"),["model","manufacturer","year","class"]]

mydata.loc[(mydata["model"]=="audi") | (mydata["manufacturer"]=="mercury"),["model","manufacturer","year","class"]]

mydata.loc[(mydata["model"]=="a4") & (mydata["manufacturer"]=="audi"),["model","manufacturer","year","class"]]

当然这种基于数据框本身的条件索引用法缺点如同在R语言中一样,不够优雅,需要额外写很多字段名称,所以也有借助外部函数来实现的方法:

mydata.query('model=="audi" | manufacturer=="mercury"')

mydata.query(' model=="a4" & manufacturer=="audi" ')

mydata.query('model=="audi" | manufacturer=="mercury"')

mydata.query(' model=="a4" & manufacturer=="audi" ')

好吧,讲了这么多,终于可以开始总结一下R语言与Python的切片索引规则重要的区别了:

R语言中生成数据框使用的圆括号,Python中则根据不同数据类型分别定义(列表用方括号、元组用圆括号、字典和几何用花括号)

R语言和Python索引都用方括号,且都是使用逗号进行行规则和列规则的位置间隔

R语言与Python在索引多行多列时传入数据类型不同,R语言传入向量,Python传入列表。

在索引多行时,R与Python都可以使用连续行列,均需提供占位符号,(R语言留白即可标识全选,Python则占位则必须提供“:”符号),在索引多列时,均无需提供占位符号。(当然提供了也不多余)。

R语言与Python都接受逻辑表达式:|表示或、&表示且。

R语言默认索引从1开始,Python从0开始(不包含尾部)。

R语言与Python均可以基于数据框自身进行索引切片,同时又都可以通过外部索引函数进行条件索引。

R语言中生成数据框使用的圆括号,Python中则根据不同数据类型分别定义(列表用方括号、元组用圆括号、字典和几何用花括号)

R语言和Python索引都用方括号,且都是使用逗号进行行规则和列规则的位置间隔

R语言与Python在索引多行多列时传入数据类型不同,R语言传入向量,Python传入列表。

在索引多行时,R与Python都可以使用连续行列,均需提供占位符号,(R语言留白即可标识全选,Python则占位则必须提供“:”符号),在索引多列时,均无需提供占位符号。(当然提供了也不多余)。

R语言与Python都接受逻辑表达式:|表示或、&表示且。

R语言默认索引从1开始,Python从0开始(不包含尾部)。

R语言与Python均可以基于数据框自身进行索引切片,同时又都可以通过外部索引函数进行条件索引。

R语言(ggplot2入门)可视化在商务场景中的应用,已经有200+小伙伴加入了!

python索引右往左_左手用R右手Python系列5——数据切片与索引相关推荐

  1. python中factor函数_左手用R右手Python系列——因子变量与分类重编码

    原标题:左手用R右手Python系列--因子变量与分类重编码 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业 ...

  2. python正则表达式中的r与转义字符_左手用R右手Python系列13——字符串处理与正则表达式...

    原标题:左手用R右手Python系列13--字符串处理与正则表达式 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化.个 ...

  3. python用merge匹配和左连接_左手用R右手Python系列——数据合并与追加

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答.求职一站式搞定! 本文作者:天善智能社区专家杜雨 今天这篇跟大家介绍R语言 ...

  4. python的rbind_左手用R右手Python系列—数据合并与追加

    原标题:左手用R右手Python系列-数据合并与追加 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答.求职一站式搞定! 今 ...

  5. python复杂网络点图可视化_数据分析:R与Python怎么选?

    作者介绍 知春里@伟仔 不知名数据科学家. 持续写<数据分析>和<数据产品>的系列文章,欢迎关注. 01 选R还是Python? "球鞋是买阿迪还是买耐克?" ...

  6. python索引右往左_[Python笔记]序列(一)索引、分片

    Python包含6种内建序列:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象. 这些序列支持通用的操作: 索引 索引是从0开始计数:当索引值为负数时,表示从最后一个元素( ...

  7. python 变量 r_左手用R右手Python系列——因子变量与分类重编码

    今天这篇介绍数据类型中因子变量的运用在R语言和Python中的实现. 因子变量是数据结构中用于描述分类事物的一类重要变量.其在现实生活中对应着大量具有实际意义的分类事物. 比如年龄段.性别.职位.爱好 ...

  8. Python从右向左查找字符串(倒序查找 从右往左)

    2021-10-14更新: 其实有一个很简单的内置函数,就是rfind,示例如下: txt = '0123456789' print(txt.rfind('8')) # 输入结果为8,也就是查找到的位 ...

  9. R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position)

    R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position) 目录 R语言dplyr包通过数据列的索引重命名数据列实战(Rename Colum ...

最新文章

  1. Delphi 组件开发教程指南(4)组件生成过程(针对TWinControl继承而来的组件)
  2. LinkedList中查询(contains)和删除(remove)源码分析
  3. kdj值应用口诀_KDJ买卖绝学!记住这些操作 精准判断quot;顶部和底部quot; 让你远离亏损...
  4. error2---BeginPath和EndPath之间的TextOut无法显示
  5. bzoj 1801: [Ahoi2009]chess 中国象棋【dp】
  6. iptable 详解_最全的iptables防火墙详解.pdf
  7. containsall_Java Vector containsAll()方法与示例
  8. 嵌入式Linux系统编程学习之二十八线程的等待退出
  9. 实现查询所有商品功能
  10. 通过图像的指针读取图像
  11. python中的清屏命令
  12. 光学接触角计算机软件,接触角软件的功能
  13. 【3D动态脑图制作软件】万彩脑图大师教程 | 将思维导图输出到云服务
  14. 云平台运维的一些心得
  15. 加密、解密、数字签名和数字证书概念详解
  16. 经常失眠怎么办?这些方法和好物可以帮到你
  17. Word文档Aspose.Words使用教程:构建适用于Android的Word转PDF应用程序
  18. 消费者与电商变革传统企业
  19. 利用MSCNN实现人群密度监测
  20. appium+夜神模拟器模拟登录、退出app代码

热门文章

  1. Oulipo(Hash入门第一题 Hash函数学习)
  2. python定义初始化函数_Python 语言定义的Class的初始化函数的函数名是( )
  3. EFGrid ---- copy 属性
  4. hannoi塔java程序_基于Java实现的Hannoi汉诺塔自动演示程序
  5. sql 按照天环比_SQL 求同比 环比
  6. python中if语句求最大值_Python中用max()方法求最大值的介绍
  7. mysql如何将多条返回结果的一个字段合并成一条
  8. IntelliJ IDEA如何build path
  9. Android开发笔记(四十二)Broadcast的生命周期
  10. 092:QuerySet API详解-切片操作