pandas——DataFrame基本操作(一)

实验目的
熟练掌握pandas中DataFrame的基本操作

实验原理
DataFrame提供的是一个类似表的结构,由多个Series组成,而Series在DataFrame中叫columns。

一、查看数据(查看对象的方法对于Series来说同样适用)

1.查看DataFrame前xx行或后xx行
a=DataFrame(data);
a.head(6)表示显示前6行数据,若head()中不带参数则会显示全部数据。
a.tail(6)表示显示后6行数据,若tail()中不带参数则也会显示全部数据。

2.查看DataFrame的index,columns以及values
a.index ; a.columns ; a.values 即可

3.describe()函数对数据快速统计汇总
a.describe()对每一列数据进行统计,包括计数,均值,std,各个分位数等。

4.对数据的转置
a.T

5.对轴进行排序
a.sort_index(axis=1,ascending=False);
其中axis=1表示对所有的columns进行排序,下面的数也跟着发生移动。后面的ascending=False表示按降序排列,参数缺失时默认升序。

6.对DataFrame中的值排序
a.sort(columns=‘x’)
即对a中的x这一列,从小到大进行排序。注意仅仅是x这一列,而上面的按轴进行排序时会对所有的columns进行操作。

二、选择对象
1.选择特定列和行的数据
a[‘x’] 那么将会返回columns为x的列,注意这种方式一次只能返回一个列。a.x与a[‘x’]意思一样。
取行数据,通过切片[]来选择
如:a[0:3] 则会返回前三行的数据。

2.loc是通过标签来选择数据
a.loc[‘one’]则会默认表示选取行为’one’的行;
a.loc[:,[‘a’,‘b’] ] 表示选取所有的行以及columns为a,b的列;
a.loc[[‘one’,‘two’],[‘a’,‘b’]] 表示选取’one’和’two’这两行以及columns为a,b的列;
a.loc[‘one’,‘a’]与a.loc[[‘one’],[‘a’]]作用是一样的,不过前者只显示对应的值,而后者会显示对应的行和列标签。

3.iloc则是直接通过位置来选择数据
这与通过标签选择类似
a.iloc[1:2,1:2] 则会显示第一行第一列的数据;(切片后面的值取不到)
a.iloc[1:2] 即后面表示列的值没有时,默认选取行位置为1的数据;
a.iloc[[0,2],[1,2]] 即可以自由选取行位置,和列位置对应的数据。

4.使用条件来选择
使用单独的列来选择数据
a[a.c>0] 表示选择c列中大于0的数据
使用where来选择数据
a[a>0] 表直接选择a中所有大于0的数据
使用isin()选出特定列中包含特定值的行
a1=a.copy()
a1[a1[‘one’].isin([‘2’,‘3’])] 表显示满足条件:列one中的值包含’2’,'3’的所有行。

三、设置值(赋值)
赋值操作在上述选择操作的基础上直接赋值即可。
例a.loc[:,[‘a’,‘c’]]=9 即将a和c列的所有行中的值设置为9
a.iloc[:,[1,3]]=9 表示1和2列的所有行中的值设置为9
同时也依然可以用条件来直接赋值
a[a>0]=-a 表示将a中所有大于0的数转化为负值

实验环境

Jupyter
Python 3.6.1

实验内容
练习pandas中DataFrame的创建与查询操作。

pandas——Dataframe

import pandas as pd
import numpy as np

1.创建DataFrame

dates = pd.date_range('20130101', periods=6)
dates
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04','2013-01-05', '2013-01-06'],dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df
A B C D
2013-01-01 0.847546 1.291573 -2.720510 -0.348135
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-03 -1.856730 -0.676007 0.676585 1.091858
2013-01-04 1.413553 0.994145 1.097863 0.854707
2013-01-05 -1.406686 0.731920 1.428273 0.260309
2013-01-06 -0.342040 1.599849 -2.143358 -0.986746

2.基础操作

1)查看df的前5行

df.head()
A B C D
2013-01-01 0.847546 1.291573 -2.720510 -0.348135
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-03 -1.856730 -0.676007 0.676585 1.091858
2013-01-04 1.413553 0.994145 1.097863 0.854707
2013-01-05 -1.406686 0.731920 1.428273 0.260309

2) 查看df的后3行

df.tail(3)
A B C D
2013-01-04 1.413553 0.994145 1.097863 0.854707
2013-01-05 -1.406686 0.731920 1.428273 0.260309
2013-01-06 -0.342040 1.599849 -2.143358 -0.986746

3) 查看df的索引名index。

df.index
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',               '2013-01-05', '2013-01-06'],              dtype='datetime64[ns]', freq='D')

4) 查看df的列名columns

df.columns
Index(['A', 'B', 'C', 'D'], dtype='object')

5) 查看df的值values

df.values
array([[ 0.84754585,  1.29157257, -2.72051013, -0.34813522],       [ 0.0763413 ,  0.65871447, -0.23554552,  1.60266872],       [-1.85672977, -0.67600652,  0.67658458,  1.09185836],       [ 1.41355302,  0.99414462,  1.09786345,  0.85470695],       [-1.40668588,  0.73192013,  1.42827312,  0.26030856],       [-0.34203952,  1.59984894, -2.143358  , -0.98674647]])

6) 查看df的数据统计描述

df.describe()
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean -0.211336 0.766699 -0.316115 0.412443
std 1.264715 0.789384 1.740925 0.962621
min -1.856730 -0.676007 -2.720510 -0.986746
25% -1.140524 0.677016 -1.666405 -0.196024
50% -0.132849 0.863032 0.220520 0.557508
75% 0.654745 1.217216 0.992544 1.032571
max 1.413553 1.599849 1.428273 1.602669

7) df的转置

df.T
2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06
A 0.847546 0.076341 -1.856730 1.413553 -1.406686 -0.342040
B 1.291573 0.658714 -0.676007 0.994145 0.731920 1.599849
C -2.720510 -0.235546 0.676585 1.097863 1.428273 -2.143358
D -0.348135 1.602669 1.091858 0.854707 0.260309 -0.986746

8) 按axis对df数据进行排序,axis=1表示按行排序,axis=0表示按列排序

df.sort_index(axis=1,ascending=False)
D C B A
2013-01-01 -0.348135 -2.720510 1.291573 0.847546
2013-01-02 1.602669 -0.235546 0.658714 0.076341
2013-01-03 1.091858 0.676585 -0.676007 -1.856730
2013-01-04 0.854707 1.097863 0.994145 1.413553
2013-01-05 0.260309 1.428273 0.731920 -1.406686
2013-01-06 -0.986746 -2.143358 1.599849 -0.342040

9) 按value对df数据和进行排序

df.sort_values(by='B')
A B C D
2013-01-03 -1.856730 -0.676007 0.676585 1.091858
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-05 -1.406686 0.731920 1.428273 0.260309
2013-01-04 1.413553 0.994145 1.097863 0.854707
2013-01-01 0.847546 1.291573 -2.720510 -0.348135
2013-01-06 -0.342040 1.599849 -2.143358 -0.986746

3.Selection查看操作

1) 查看df中的A列,返回一个Series

df['A']
2013-01-01    0.8475462013-01-02    0.0763412013-01-03   -1.8567302013-01-04    1.4135532013-01-05   -1.4066862013-01-06   -0.342040Freq: D, Name: A, dtype: float64

2)通过[ ] (切片)查看df的行片段

df[0:3]
A B C D
2013-01-01 0.847546 1.291573 -2.720510 -0.348135
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-03 -1.856730 -0.676007 0.676585 1.091858

4.通过label查看df数据 (花式索引)

1) 使用loc查看df中dates[0]的部分

df.loc[dates[0]]
A    0.847546B    1.291573C   -2.720510D   -0.348135Name: 2013-01-01 00:00:00, dtype: float64

2)使用loc查看A、B两列的值

df.loc[:,['A','B']]
A B
2013-01-01 0.847546 1.291573
2013-01-02 0.076341 0.658714
2013-01-03 -1.856730 -0.676007
2013-01-04 1.413553 0.994145
2013-01-05 -1.406686 0.731920
2013-01-06 -0.342040 1.599849

3) 使用loc查看日期从20130102到20130104的A,B两列的值

df.loc['20130102':'20130104',['A','B']]
A B
2013-01-02 0.076341 0.658714
2013-01-03 -1.856730 -0.676007
2013-01-04 1.413553 0.994145

4) 减少维度,查看日期为20130102中A,B两列的值

df.loc['20130102',['A','B']]
A    0.076341B    0.658714Name: 2013-01-02 00:00:00, dtype: float64

5) 得到一个标量值,使用loc查看df中date[0],A列的值

df.loc[dates[0],['A']]
A    0.847546Name: 2013-01-01 00:00:00, dtype: float64
df.loc[dates[0],'A']
0.8475458518680259

6) 使用at快速查找df中dates[0],A列的值。

df.at[dates[0],'A']
0.8475458518680259

5.通过位置查看df数据(位置索引)

1)使用iloc查看df的第4行数据

df.iloc[3]
A    1.413553B    0.994145C    1.097863D    0.854707Name: 2013-01-04 00:00:00, dtype: float64

2) 使用iloc查看df中行下标为3:5,列下标为0:2的数据(不包含行下标为5的行,也不包含列下标为2的列)

df.iloc[3:5,0:2]
A B
2013-01-04 1.413553 0.994145
2013-01-05 -1.406686 0.731920

3) 使用iloc查看df中行下标为1,2,4,列下标为0,2的数据

df.iloc[[1,2,4],[0,2]]
A C
2013-01-02 0.076341 -0.235546
2013-01-03 -1.856730 0.676585
2013-01-05 -1.406686 1.428273

4) 使用iloc查看df行下标为1:3的数据(不包含下标为3的行)。

df.iloc[1:3,:]
A B C D
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-03 -1.856730 -0.676007 0.676585 1.091858

5) 使用iloc查看df行列下标都为1的值

df.iloc[1,1]
0.658714467091628

6) 使用iat方法快速查看df中行列下标均为1的值。

df.iat[1,1]
0.658714467091628

6.使用布尔索引查看df的数据

1)查看df中满足df.A>0布尔条件的值

df[df.A>0]
A B C D
2013-01-01 0.847546 1.291573 -2.720510 -0.348135
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-04 1.413553 0.994145 1.097863 0.854707

2) 查看df中满足df>0布尔条件的值

df[df>0]
A B C D
2013-01-01 0.847546 1.291573 NaN NaN
2013-01-02 0.076341 0.658714 NaN 1.602669
2013-01-03 NaN NaN 0.676585 1.091858
2013-01-04 1.413553 0.994145 1.097863 0.854707
2013-01-05 NaN 0.731920 1.428273 0.260309
2013-01-06 NaN 1.599849 NaN NaN

3) 使用copy方法赋值df给df2,为df2添加列名为E,值为[‘one’, ‘one’,‘two’,‘three’,‘four’,‘three’]的列,再使用isin()方法过滤出df中满足df2.E在[‘two’,‘four’]的数据。

df2=df.copy()  df2
A B C D
2013-01-01 0.847546 1.291573 -2.720510 -0.348135
2013-01-02 0.076341 0.658714 -0.235546 1.602669
2013-01-03 -1.856730 -0.676007 0.676585 1.091858
2013-01-04 1.413553 0.994145 1.097863 0.854707
2013-01-05 -1.406686 0.731920 1.428273 0.260309
2013-01-06 -0.342040 1.599849 -2.143358 -0.986746
df2['E']=['one', 'one','two','three','four','three']  df2
A B C D E
2013-01-01 0.847546 1.291573 -2.720510 -0.348135 one
2013-01-02 0.076341 0.658714 -0.235546 1.602669 one
2013-01-03 -1.856730 -0.676007 0.676585 1.091858 two
2013-01-04 1.413553 0.994145 1.097863 0.854707 three
2013-01-05 -1.406686 0.731920 1.428273 0.260309 four
2013-01-06 -0.342040 1.599849 -2.143358 -0.986746 three
df[df2['E'].isin(['two','four'])]
A B C D
2013-01-03 -1.856730 -0.676007 0.676585 1.091858
2013-01-05 -1.406686 0.731920 1.428273 0.260309

pandasDataframe模块相关推荐

  1. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  2. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能

    1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...

  3. Python 多线程总结(1)- thread 模块

    thread 模块 1. 单线程 首先看下单线程程序运行的例子,如下所示, import timedef loop0():print 'start loop0 begin', time.ctime() ...

  4. 关于python导入模块和package的一些深度思考

    背景 在python中有导入模块和导入package一说,这篇文章主要介绍导入模块和package的一些思考. 首先什么是模块?什么是package? 模块:用来从逻辑上组织python代码(变量,函 ...

  5. Python Re 模块超全解读!详细

    内行必看!Python Re 模块超全解读! 2019.08.08 18:59:45字数 953阅读 121 re模块下的函数 compile(pattern):创建模式对象 > import ...

  6. python性能分析之line_profiler模块-耗时,效率 时间

    20210203 直接用pycharm 自带的 20201215 直接装不上的情况下 先下载安装文件 再安装 line_profiler使用装饰器(@profile)标记需要调试的函数.用kernpr ...

  7. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  8. 关于python 中的__future__模块

    Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动.有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了. 具体说来就是,某个版本中出现了某个 ...

  9. GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态

    GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态 一个Python模块,用于在Python中使用nvidia-smi以编程方式从NVIDA GPU获取GP ...

  10. Python多线程(3)——Queue模块

    Python多线程(3)--Queue模块 Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Pyth ...

最新文章

  1. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下
  2. rxlifecycle 框架的使用
  3. springboot 创建地址_这可能是史上最易懂的 Spring Boot 入门教程
  4. 《自然》重磅新论文:女性更易患阿尔兹海默症,竟然是因为它!
  5. 中国移动上市第二日逼近破发线
  6. 论文翻译:Real-Time High-Resolution Background Matting
  7. read while循环 tar脚本
  8. 解决POI大数据导出Excel内存溢出、应用假死
  9. linux备份文件_aptclone:备份已安装的软件包并在新的 Ubuntu 系统上恢复它们 | Linux 中国...
  10. 四级信息安全工程师基础知识
  11. 联想y430完全拆机图解_y430p拆机详细步骤及如何安装mSATA接口的固态硬盘?
  12. 用PPT就可以做印章?是的,超简单超逼真,教你一分钟搞定
  13. 计算机二级excel高级筛选,Excel 如何按双条件执行高级筛选?
  14. MySql (4)-储存引擎、索引、锁、集群
  15. 【新周报(049)】Datawhale组队学习
  16. 使用aws跑深度学习_11. 附录 - 11.4. 使用AWS运行代码 - 《动手学深度学习》 - 书栈网 · BookStack...
  17. iOS 判断字符串中含有某个字符串 rangeOfString
  18. 全球及中国ICP-OES光谱仪行业产销需求与投资前景预测报告2022~2027年
  19. Java的字节流和字符流
  20. 脑电分析系列[MNE-Python-20]| 脑电图处理和事件相关电位(ERP)

热门文章

  1. 解决IIS进程回收后第一次访问慢的问题
  2. jQuery焦点图轮播slide插件
  3. android SDK 常见安装方法
  4. 4.串口操作之API篇 CreateFile
  5. 把Oracle数据库移植到Microsoft SQL Server 7.0
  6. 生成特定区间的随机数
  7. Improving Opencv11 Extract horizontal and vertical lines by using morphological operations
  8. 20200621每日一句
  9. unity数组或链表需要空间很大赋值与调用
  10. atitit 每季度日程表 每季度流程 v3 qaf.docx Ver history V2 add diary cyar data 3 cate V3 fix detail 3cate ,