pandas行和列的获取的实现
作者:羊羊猪 发布时间:2022-06-05 07:57:49
DataFrame的行和列:df[‘行’, ‘列’]
DataFrame行和列的获取分三个维度
行和列选取:df[],一次只能选取行或列
区域选取:df.loc[], df.iloc[], df.ix[],可以同时为行或列设置筛选条件
单元格选取:df.at[], df.iat[],准确选取某个单元格
先随机生成一个dataframe
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10,5), index=list('abcdefghij'), columns=list('ABCDE'))
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
c -0.359802 -2.049489 -0.615742 -1.953994 0.685243
d 0.232557 1.768284 -0.447015 2.373358 1.220536
e -0.997380 -0.447236 0.632368 -0.352590 -0.064736
f -1.220178 -0.314304 1.202184 0.018326 1.072153
g -1.508916 0.380466 0.359506 -0.742657 -0.373764
h 1.031420 -3.236676 0.444769 1.396802 -0.405590
i 0.166133 -0.051614 -0.146943 0.609431 -0.351814
j 1.857521 -0.159101 0.899745 1.108722 -0.615379
1. 行和列的获取
1.1 根据索引获取行
获取前3行数据
df[:3]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
c -0.359802 -2.049489 -0.615742 -1.953994 0.685243
获取第2到3行数据
df[1:3] # 前闭后开
df['b':'c'] # # 前闭后闭
# Output
A B C D E
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
c -0.359802 -2.049489 -0.615742 -1.953994 0.685243
获取特定行数据
# 布尔数组 (数组长度需等于行数)
df[[True,False,True,False,False,False, True, True, False, True]]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
c -0.359802 -2.049489 -0.615742 -1.953994 0.685243
g -1.508916 0.380466 0.359506 -0.742657 -0.373764
h 1.031420 -3.236676 0.444769 1.396802 -0.405590
j 1.857521 -0.159101 0.899745 1.108722 -0.615379
1.2 根据条件获取行
获取A列大于0的行
df[df.A > 0]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
d 0.232557 1.768284 -0.447015 2.373358 1.220536
h 1.031420 -3.236676 0.444769 1.396802 -0.405590
i 0.166133 -0.051614 -0.146943 0.609431 -0.351814
j 1.857521 -0.159101 0.899745 1.108722 -0.615379
获取A列和B列大于0的行
df[(df.A > 0) & (df.B > 0)]
# Output
A B C D E
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
d 0.232557 1.768284 -0.447015 2.373358 1.220536
获取A列或列大于0的行
df[(df.A > 0) | (df.B > 0)]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
d 0.232557 1.768284 -0.447015 2.373358 1.220536
g -1.508916 0.380466 0.359506 -0.742657 -0.373764
h 1.031420 -3.236676 0.444769 1.396802 -0.405590
i 0.166133 -0.051614 -0.146943 0.609431 -0.351814
j 1.857521 -0.159101 0.899745 1.108722 -0.615379
1.3 获取列
# 获取A列
df['A'] # 输出为Series类型
df[['A']] # 输出为DataFrame类型
# 获取A列和B列
df[['A', 'B']]
df[df.columns[0:2]]
2. 区域选取
df.loc[] 只能使用标签索引,不能使用整数索引,通过便签索引切边进行筛选时,前闭后闭。
df.iloc[] 只能使用整数索引,不能使用标签索引,通过整数索引切边进行筛选时,前闭后开。
df.ix[]既可以使用标签索引,也可以使用整数索引。
2.1 df.loc[]
pandas.DataFrame.loc 官方文档
2.1.1 行选取
获取a行
# 输出为Series类型
df.loc['a']
df.loc['a', :]
# Output
A 0.299206
B -0.383297
C -0.931467
D -0.591609
E -1.131105
Name: a, dtype: float64
# 输出为DataFrame类型
df.loc[['a']]
df.loc[['a'], :]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
获取a, b, d行
# 使用标签索引
df.loc[['a', 'b', 'd']]
df.loc[['a', 'b', 'd'], :]
# 使用布尔数组
df[[True, True, False, True, False, False, False, True, False, True]]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
d 0.232557 1.768284 -0.447015 2.373358 1.220536
获取a到d行
df.loc['a':'d', :]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
c -0.359802 -2.049489 -0.615742 -1.953994 0.685243
d 0.232557 1.768284 -0.447015 2.373358 1.220536
选取A列大于0的行
df.loc[df.A > 0]
df.loc[df.A > 0, :]
# Output
A B C D E
a 0.299206 -0.383297 -0.931467 -0.591609 -1.131105
b 0.074351 0.791849 1.637467 -1.408712 -1.376527
d 0.232557 1.768284 -0.447015 2.373358 1.220536
h 1.031420 -3.236676 0.444769 1.396802 -0.405590
i 0.166133 -0.051614 -0.146943 0.609431 -0.351814
j 1.857521 -0.159101 0.899745 1.108722 -0.615379
2.1.2 列选取
# 选取A列
df.loc[:, 'A']
# 选取A列和C列
df.loc[:, ['A', 'C']]
# 选取A列到C列
df.loc[:, 'A':'C']
2.1.3 同时选取行和列
# 选取c行B列的值
df.loc['c', 'B']
# 选取A列和B列同时大于0的C列和D列
df.loc[((df.A > 0) & (df.B > 0)), ['C', 'D']]
2.1.4 行和列的赋值
# 令a行为10
df.loc['a', :] = 10
# 令B列为50
df.loc[:, 'B'] = 50
# 令b, c行的C到F列为30
df.loc[['b', 'c'], 'C':'F'] = 30
# 令C列小于0的行赋值为0
df.loc[df.C < 0] = 0
2.1.5 多重索引
Example
tuples = [
('cobra', 'mark i'), ('cobra', 'mark ii'),
('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
('viper', 'mark ii'), ('viper', 'mark iii')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[12, 2], [0, 4], [10, 20],
[1, 4], [7, 1], [16, 36]]
df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
# Output
df
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
mark iii 16 36
df.loc['cobra']
max_speed shield
mark i 12 2
mark ii 0 4
# return a Series
df.loc[('cobra', 'mark ii')]
max_speed 0
shield 4
Name: (cobra, mark ii), dtype: int64
# return a dataframe
df.loc[[('cobra', 'mark ii')]]
max_speed shield
cobra mark ii 0 4
# return a Series
df.loc['cobra', 'mark i']
max_speed 12
shield 2
Name: (cobra, mark i), dtype: int64
df.loc[('cobra', 'mark i'), 'shield']
df.loc[('cobra', 'mark i'):'viper']
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
mark iii 16 36
df.loc[('cobra', 'mark i'):('viper', 'mark ii')]
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
2.2 df.iloc[ ]
pandas.DataFrame.iloc 官方文档
2.2.1 行选取
选取第二行
# return a Series
df.iloc[1]
df.iloc[1, :]
# return a dataframe
df.iloc[[1]]
df.iloc[[1], :]
选取前三行
df.iloc[:3, :]
df.iloc[:3]
选取第一、三、五行
df.iloc[[1, 3, 5]]
df.iloc[[1, 3, 5], :]
2.2.2 列选取
选取第二列
df.iloc[:, 1]
选取前三列
df.iloc[:, 0:3]
df.iloc[:,:3]
选取第一三四列
df.iloc[:, [0, 2, 3]]
2.2.3 同时选取行和列
选取第一行第二列的值
df.iloc[0, 1]
选取第二三行的第二到四列
df.iloc[[1,2], 1:4]
2.3 df.ix[ ]
可以混合标签索引和整数索引
However, when an axis is integer based, ONLY label based access and not positional access is supported. Thus, in such cases, it’s usually better to be explicit and use .iloc or .loc.
3. 单元格选取
df.at[ ] 只能使用标签索引
df.iat[ ] 只能使用整数索引
3.1 df.at[]
pandas.DataFrame.at 官方文档
获取c行C列的值
df.at['c', 'C']
把c行C列赋值为10
df.at['c', 'C'] = 10
3.2 df.iat[]
pandas.DataFrame.iat 官方文档
获取第三行第三列的值
df.iat[2, 2]
把第三行第三列赋值为10
df.iat[2, 2] = 10
来源:https://blog.csdn.net/weixin_46599926/article/details/122795057


猜你喜欢
- 有时,希望除去某些记录或更改它们的内容。DELETE 和 UPDATE 语句令我们能做到这一点。用update修改记录UPDATE tbl_
- 简介进行按钮进行界面的跳转,我这里面我介绍两种,一种是没有使用Qtdesigner的代码,另一种是使用Qtdesigner的代码代码1imp
- 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的方法。几乎所有高级语言都提供了对正则表达式的支持,或
- 一、前言三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,有时又称为三元运算符
- 由于一些原因,需要SAE上站点的日志文件,从SAE上只能按天下载,下载下来手动处理比较蛋疼,尤其是数量很大的时候。还好SAE提供了API可以
- Mysql事务操作失败如何解决事务的原子性 :事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做 。要实现事务的原子性,单单
- 一、引言属性将值与类,结构体,枚举进行关联。Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算
- 相关代码:JavaScript写的日期时间控件,很好用 13个超酷的js显示时间效果 <html><head><
- 数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点
- ECMAScript 6 新增 const 和 let 命令,用来声明变量。声明方式变量提升作用域初始值重复定义const否块级需要不允许l
- 前言MySQL提供了众多功能强大、方便易用的函数。使用这些函数可以极大地提高用户对数据库的管理效率。MySQL中的函数包括数学函数、字符串函
- 你是不是觉得每次新建项目都要写一次# coding:utf-8,感觉特烦人呐!懒(fu)人(li)教程来啦,先看效果图吧中文版如图进入设置然
- 你好,我是林骥。斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据。比如说,为了对比分析某产品不同功能的用户满意
- 本文实例为大家分享了python mysql个人论文管理系统的具体代码,供大家参考,具体内容如下1.mysql数据库建表在mysql数据库里
- 前段时间在论坛上有人问到一个淘宝网上的hover伪类实现的效果如果兼容ie6。其实,问题很简单,就是hover伪类在IE6中得不到很好的支持
- “你如何为成千上万的用户和页面提供CSS?” 这是Nicole Sullivan在她的在丹佛的Web Directions North 大会
- 先贴代码,之后完善:<!doctype html><html lang="en"> <he
- 使用tf.keras.MaxPooling1D出现错误错误如下ValueError: Negative dimension size cau
- 一、随机数种子为什么要提出随机数种子呢?咱们前面提到过了,随机数均是模拟出来的, 想要模拟的比较真实,就需要变换种子函数内的数值,一般以时间
- 本文实例讲述了Python wxPython库Core组件BoxSizer用法。分享给大家供大家参考,具体如下:wx.BoxSizer:bo