Pandas库:(三)数组对象的数据查询

目录

select_dtypes数据类型查询法

列名获取法

获取行数据

切片获取法

DataFrame对象方法head、tail

样本随机法

索引(行标)获取法

loc

iloc

query查询

布尔选择法


import pandas as pd


data = {
    '语文': [0, 19, 9, 28, 91, 56],
    '数学': [64, 81, 80, 17, 37, 52],
    '英语': [40, 25, 45, 58, 67, 57],
    '化学': [32, 38, 7, 12, 33, 28],
    '物理': [69, 43, 44, 62, 3, 67],
    '体育': [93, 7, 77, 95, 40, 89],
    '科目': ['科一', '科二', '科三', '科四', '科五', '科六']

}

df = pd.DataFrame(data, index=[2, 6, 7, 9, 10, 'cs'])

select_dtypes数据类型查询法

def select_dtypes(self, include=None, exclude=None)支持include和exclude参数,参数均支持字符串或列表传值。

print(df.select_dtypes(exclude='int64'))  # 选择非int64类型的列
print(df.select_dtypes(include=['int64', 'object']))  # 选择包含int64和object类型的列

列名获取法

通过列名获取数据

print(df)
print(df[['物理', '体育']])

获取行数据

切片获取法

支持同列表数据一样的切片获取

print(df[:5])  # 获取前n-1行
print(df[-2:])  # 获取后几行
print(df[::2])  # 每隔n-1行获取一条数据
DataFrame对象方法head、tail

head:获取前n行,有一个参数n,默认=5,为前五行,可以自定义设置

tail: 获取后n行,有一个参数n,默认=5,为后五行,可以自定义设置

print(df.head())  # 获取前n行,有一个参数n,默认=5,为前五行,可以自定义设置
print(df.tail(n=3))  # 获取后n行,有一个参数n,默认=5,为后五行,可以自定义设置

样本随机法

DataFrame对象的sample方法支持随机获取样本数据,sample() 方法的常用参数:

参数描述
n抽取的样本数量(行或列的数量)。
frac抽取的样本比例(例如 frac=0.5 表示抽取 50% 的样本)。
replace是否允许重复采样。默认为 False(不允许重复)。
weights每个样本的权重,权重越高,被抽中的概率越大。
random_state随机种子,用于确保结果可重复。参数用于设置随机种子,确保每次运行的结果一致。
axis采样方向:0 表示按行采样(默认),1 表示按列采样。(行:0或‘index’, 列:1或‘columns’,默认为None)
print(df.sample(n=3))  # 随机获取N行,N默认为1

print(df.sample(frac=.4))  # 随机获取百分之frac行数据,数据顺序与原数组数据不一致,也是随机的

print(df.sample(axis='columns'))

weights = [0.1, 0.2, 0.3, 0.2, 0.2, 0.6]
print(df.sample(weights=weights))

print(df.sample(random_state=10))

索引(行标)获取法

loc表示自定义或系统默认索引,支持修改的索引,用法:DataFrame.loc()[行索引或行名称或条件,列名称]

iloc表示计算机系统记忆的索引(从0开始的整型递增数字),不支持的修改的索引,相当于EXCEL中的行号和列号,用法:DataFrame.iloc()[行索引,列索引]

使用时可以省去括号 ,loc()[]  同 loc[] ,iloc()[] 同 iloc[],[]中均可传两个参数,[行参数,列参数]

loc

1、如果只有一个值,且参数非列表类型时,会根据索引名称匹配,返回一个一维数组。

print(df.loc['cs'])  # 获取一行数据并转为一维数组

2、只有一个参数,参数为列表时,表示获取列表中索引对应的数据

print(df.loc[[2, 'cs']])  # 结果同print(df.loc()[[2, 'cs']])

3、获取数组中某一行中的某几列的数据

print(df.loc()[2, ['物理', '语文']])

4、两个参数都不是列表时,获取某行某列数据

print(df.loc()[2, '物理'])    # 同print(df.loc()[2]['物理'])

5、获取某几行中的某几列

print(df.loc()[[2, 'cs'], ['物理', '数学', '体育']])  # 获取某几行中的某几列

6、支持&、|、isin运算

DataFrame对象支持和运算、或运算。

print(df.loc()[(df['数学'] > 20) & (df['语文'] >= 19), ['物理', '数学', '体育']])

isin作为DataFrame对象的方法,表示获取数组中包含某些值的数据。

print(df.loc()[df['数学'].isin([64, 80, 81])])

iloc
print('-----------------获取某一行数据并转为一维数组----------------------')
print(df.iloc()[0])  # 获取某一行数据并转为一维数组
print('-----------------获取某行某列数组值----------------------')
print(df.iloc()[0, 0])  # 获取某行某列数组值
print('-------------------获取某几行的某几列--------------------')
print(df.iloc()[[1, 5], [0, 2, 3]])  # 获取某几行的某几列

query查询

在 Pandas 中,query() 方法提供了一种简洁且高效的方式来过滤 DataFrame 或 Series 中的数据。它允许使用字符串表达式来筛选数据,类似于 SQL 中的 WHERE 子句。def query(self, expr: str, *, inplace: bool = False, **kwargs) -> DataFrame | None

1、expr是一个字符串表达式,支持使用逻辑运算符 &(与)、|(或)来组合多个条件,支持!=、==、< 、>等运算符 ,使用时必须在逻辑运算中使用括号()。

print(df.query('语文>5 | 数学>32'))
print('---------------------------------------')
print(df.query('科目 == "科一"'))
print('---------------------------------------')
print(df.query('语文 == 91'))

2、expr表达式支持使用变量,变量通过@j进行引用

value = 30
result = df.query('化学 > @value')
print(result)

3、expr表达式支持使用数组索引

print(df.query('index == "cs"'))

4、expr表达式支持使用 in 和 not in 操作符。

print('-----------------行索引包含(不包含)----------------------')
print(df.query('index in [2, "cs"]'))
print('-----------------列索引包含(不包含)---------------------')
print(df.query('语文 in [91, 56]'))

布尔选择法

1、DataFrame.列索引名 可用来判断条件下对应行数据的真假

print((df.语文 >= 20) & (df.数学 >= 30))

 

2、获取符合条件的数据,即判断值为真时的索引行

print(df[(df.语文 >= 20) & (df.数学 >= 30)])

3、DataFrame对象支持between进行区间选择

print(df.语文.between(20, 95))
print(df[df.语文.between(20, 95)])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值