数据介绍

先随机生成一组数据:

import pandas as pd
import numpy as np state = ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada']
year = [2000, 2001, 2002, 2003, 2004]
pop = [1.3, 1.4, 1.6, 4.5, 2.7]
frame = pd.DataFrame({'state': state, 'year': year, 'pop': pop})
print(frame)

结果:

   pop   state  year
0 1.3 Ohio 2000
1 1.4 Ohio 2001
2 1.6 Ohio 2002
3 4.5 Nevada 2003
4 2.7 Nevada 2004

1. []切片方法

# 行选择
print(frame[1:3]) # 列选择
print(frame[['year', 'pop']]) # 区块选择
print(frame[:3][['state', 'year']])

结果:

   pop state  year
1 1.4 Ohio 2001
2 1.6 Ohio 2002
year pop
0 2000 1.3
1 2001 1.4
2 2002 1.6
3 2003 4.5
4 2004 2.7
state year
0 Ohio 2000
1 Ohio 2001
2 Ohio 2002

2.loc(按照索引来进行行列选择)

# 行选择
print(frame.loc[1:3]) # 区块选择
print(frame.loc[1:3, ['year', 'pop']])

结果:

   pop   state  year
1 1.4 Ohio 2001
2 1.6 Ohio 2002
3 4.5 Nevada 2003
year pop
1 2001 1.4
2 2002 1.6
3 2003 4.5

注意:loc与[]的不同之处在于会把3也选择进去,而使用[]是不包含的。

In [15]: data_fecha.head()
Out[15]:
rnd_1 rnd_2 rnd_3
fecha
2012-04-10 8 17 12
2012-04-11 1 16 3
2012-04-12 7 6 1
2012-04-13 2 16 7
2012-04-14 4 17 7 In [16]: # 生成两个特定日期
...: fecha_1 = dt.datetime(2013, 4, 14)
...: fecha_2 = dt.datetime(2013, 4, 18)
...:
...: # 生成切片数据
...: data_fecha.loc[fecha_1: fecha_2]
Out[16]:
rnd_1 rnd_2 rnd_3
fecha
2013-04-14 17 10 5
2013-04-15 14 4 9
2013-04-16 1 2 18
2013-04-17 9 15 1
2013-04-18 16 7 17

建议:使用loc而尽量少使用[],因为loc在对DataFrame进行重新赋值操作时会避免chained indexing问题,使用[]时编译器很可能会给出SettingWithCopy的警告。

3.iloc

如果说loc是按照索引(index)的值来选取的话,那么iloc就是按照索引的位置来进行选取。iloc不关心索引的具体值是多少,只关心位置是多少,所以使用iloc时方括号中只能使用数值。

# 行选择
print(frame.iloc[1:3]) # 列选择
print(frame.iloc[:, [1, 2]]) # 区块选择
print(frame.iloc[[1, 3, 4], [0, 2]])

结果:

   pop state  year
1 1.4 Ohio 2001
2 1.6 Ohio 2002
state year
0 Ohio 2000
1 Ohio 2001
2 Ohio 2002
3 Nevada 2003
4 Nevada 2004
pop year
1 1.4 2001
3 4.5 2003
4 2.7 2004

4.at

at的使用方法与loc类似,但是比loc有更快的访问数据的速度,而且只能访问单个元素,不能访问多个元素。

import time
start = time.clock()
frame.at[1,'year']
Out[8]: 2001
end = time.clock()
end - start
Out[11]: 30.75638200200791
start = time.clock()
frame.loc[1,'year']
Out[13]: 2001
end = time.clock()
end - start
Out[15]: 29.014473024534

5.iat

iat对于iloc的关系就像at对于loc的关系,是一种更快的基于索引位置的选择方法,同at一样只能访问单个元素。

In [15]:frame.iat[1,2]
Out[16]: 2001

6.ix

以上几种方法都要求查询的秩在索引中,或者位置不超过长度范围,而ix允许你得到不在DataFrame索引中的数据。

In [28]: date_1 = dt.datetime(2013, 1, 10, 8, 30)
...: date_2 = dt.datetime(2013, 1, 13, 4, 20)
...:
...: # 生成切片数据
...: data_fecha.ix[date_1: date_2]
Out[28]:
rnd_1 rnd_2 rnd_3
fecha
2013-01-11 19 17 19
2013-01-12 10 9 17
2013-01-13 15 3 10

2013年1月10号并没有被选择进去,因为这个时间点被看作为0点0分,比8点30分要早一些。

pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)的更多相关文章

  1. pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

    pandas DataFrame的增删查改总结系列文章: pandas DaFrame的创建方法 pandas DataFrame的查询方法 pandas DataFrame行或列的删除方法 pand ...

  2. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  3. pandas中DataFrame的ix,loc,iloc索引方式的异同

    pandas中DataFrame的ix,loc,iloc索引方式的异同 1.loc: 按照标签索引,范围包括start和end 2.iloc: 在位置上进行索引,不包括end 3.ix: 先在inde ...

  4. Spark与Pandas中DataFrame对比

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  5. Spark与Pandas中DataFrame对比(详细)

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

  6. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  7. pandas中DataFrame使用

    切片选择 #显示第一行数据print(df.head(1)) #显示倒数三行数据 print(df.tail(3)) loc  df.loc[row_index,col_index]  注意loc是根 ...

  8. pandas中DataFrame和Series的数据去重

    在SQL语言中去重是一件相当简单的事情,面对一个表(也可以称之为DataFrame)我们对数据进行去重只需要GROUP BY 就好. select custId,applyNo from tmp.on ...

  9. pandas中DataFrame重置设置索引

    在pandas中,经常对数据进行处理 而导致数据索引顺序混乱,从而影响数据读取.插入等. 小笔总结了以下几种重置索引的方法: import pandas as pd import numpy as n ...

随机推荐

  1. python开发基础之语法基础

    一.知识点 (一)python介绍 1.Python被设计成一种高可读性的语言,它大量地使用了英语单词作为关键字,不像其他语言使用标点符号构成复杂的语法结构. 2.Pyton是支持面向对象的,支持在对 ...

  2. .net core 2.0 报错:error NU1102: Unable to find package 。。。

    这种是nuget无法还原的问题.解决问题的方法: 在项目文件所在的目录下创建文件:NuGet.Config 里面内容: "?> <configuration> <pa ...

  3. Tomcat关闭失败,SEVERE: Could not contact localhost:8005. Tomcat may not be running.

    SEVERE: Could not contact localhost:8005. Tomcat may not be running. Tomcat 启动后,关闭失败,显示以下 进入 java 的安 ...

  4. 2018-2019-2 20165234 《网络对抗技术》 Exp2 后门原理与实践

    实验二 后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其 ...

  5. verdi\debussy的使用技巧

    verdi\debussy的使用技巧 转载from 大西瓜FPGA 大西瓜FPGA-->https://daxiguafpga.taobao.com fsdb display Debussy本身 ...

  6. imageview设置图片时超长超大图片超出限制(OpenGLRenderer: Bitmap too large to be uploaded into a texture (996x9116, max=4096x4096))

    问题:遇到超长图片,宽长等比缩放,比如宽度同屏幕同宽,长度等比放大,放到后遇到长度超出OpenGLRenderer的最大限制,导致图片无法显示出来: 解决办法: //图片超出GPU对于openglRe ...

  7. webpack 打包报错:One CLI for webpack must be installed. These are recommended choices, delivered as separate packages

    webpack 打包报错: One CLI for webpack must be installed. These are recommended choices, delivered as sep ...

  8. Freemarker网页静态化

    Freemarker的jar包 创建整合spring的配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  9. poj1847 Tram(最短路dijkstra)

    描述: Tram network in Zagreb consists of a number of intersections and rails connecting some of them. ...

  10. 20175226 2018-2019-2 《Java程序设计》第五周学习总结

    20175226 2018-2019-2 <Java程序设计>第五周学习总结 教材学习内容总结 接口 包含接口声明和接口体 接口声明interface 接口的名字 接口体中包含常量的声明( ...