您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:pandas之query方法和sample随机抽样操作

51自学网 2021-10-30 22:53:14
  python
这篇教程pandas之query方法和sample随机抽样操作写得很实用,希望能帮到您。

query方法

在 pandas 中,支持把字符串形式的查询表达式传入 query 方法来查询数据,其表达式的执行结果必须返回布尔列表。在进行复杂索引时,由于这种检索方式无需像普通方法一样重复使用 DataFrame 的名字来引用列名,一般而言会使代码长度在不降低可读性的前提下有所减少。

例如

In [61]: df.query('((School == "Fudan University")&'  ....:     ' (Grade == "Senior")&'  ....:     ' (Weight > 70))|'  ....:     '((School == "Peking University")&'  ....:     ' (Grade != "Senior")&'  ....:     ' (Weight > 80))')  ....: Out[61]:         School   Grade      Name Gender Weight Transfer38  Peking University Freshman    Qiang Han  Male  87.0    N66  Fudan University  Senior Chengpeng Zhou  Male  81.0    N99  Peking University Freshman Changpeng Zhao  Male  83.0    N131  Fudan University  Senior Chengpeng Qian  Male  73.0    Y

在 query 表达式中,帮用户注册了所有来自 DataFrame 的列名,所有属于该 Series 的方法都可以被调用,和正常的函数调用并没有区别,例如查询体重超过均值的学生:

In [62]: df.query('Weight > Weight.mean()').head()Out[62]:               School   Grade      Name Gender Weight Transfer1        Peking University  Freshman Changqiang You  Male  70.0    N2  Shanghai Jiao Tong University   Senior     Mei Sun  Male  89.0    N4        Fudan University Sophomore   Gaojuan You  Male  74.0    N10 Shanghai Jiao Tong University  Freshman  Xiaopeng Zhou  Male  74.0    N14      Tsinghua University   Senior  Xiaomei Zhou Female  57.0    N

同时,在 query 中还注册了若干英语的字面用法,帮助提高可读性,例如: or, and, or, is in, not in 。

例如,筛选出男生中不是大一大二的学生:

In [63]: df.query('(Grade not in ["Freshman", "Sophomore"]) and'  ....:     '(Gender == "Male")').head()  ....: Out[63]:               School  Grade      Name Gender Weight Transfer2  Shanghai Jiao Tong University Senior    Mei Sun  Male  89.0    N16      Tsinghua University Junior Xiaoqiang Qin  Male  68.0    N17      Tsinghua University Junior   Peng Wang  Male  65.0    N18      Tsinghua University Senior  Xiaofeng Sun  Male  71.0    N21 Shanghai Jiao Tong University Senior Xiaopeng Shen  Male  62.0   NaN

此外,在字符串中出现与列表的比较时, ==和!= 分别表示元素出现在列表和没有出现在列表,等价于 is in 和 not in,例如查询所有大三和大四的学生:

In [64]: df.query('Grade == ["Junior", "Senior"]').head()Out[64]:               School  Grade      Name Gender Weight Transfer2  Shanghai Jiao Tong University Senior    Mei Sun  Male  89.0    N7       Tsinghua University Junior Gaoqiang Qian Female  50.0    N9        Peking University Junior    Juan Xu Female   NaN    N11      Tsinghua University Junior  Xiaoquan Lv Female  43.0    N12 Shanghai Jiao Tong University Senior    Peng You Female  48.0   NaN

对于 query 中的字符串,如果要引用外部变量,只需在变量名前加 @ 符号。例如,取出体重位于70kg到80kg之间的学生:

In [65]: low, high =70, 80In [66]: df.query('Weight.between(@low, @high)').head()Out[66]:               School   Grade      Name Gender Weight Transfer1        Peking University  Freshman Changqiang You  Male  70.0    N4        Fudan University Sophomore   Gaojuan You  Male  74.0    N10 Shanghai Jiao Tong University  Freshman  Xiaopeng Zhou  Male  74.0    N18      Tsinghua University   Senior  Xiaofeng Sun  Male  71.0    N35       Peking University  Freshman   Gaoli Zhao  Male  78.0    N

随机抽样

如果把 DataFrame 的每一行看作一个样本,或把每一列看作一个特征,再把整个 DataFrame 看作总体,想要对样本或特征进行随机抽样就可以用 sample 函数。有时在拿到大型数据集后,想要对统计特征进行计算来了解数据的大致分布,但是这很费时间。

同时,由于许多统计特征在等概率不放回的简单随机抽样条件下,是总体统计特征的无偏估计,比如样本均值和总体均值,那么就可以先从整张表中抽出一部分来做近似估计。

sample 函数中的主要参数为 n, axis, frac, replace, weights ,前三个分别是指抽样数量、抽样的方向(0为行、1为列)和抽样比例(0.3则为从总体中抽出30%的样本)。

replace 和 weights 分别是指是否放回和每个样本的抽样相对概率,当 replace = True 则表示有放回抽样。例如,对下面构造的 df_sample 以 value 值的相对大小为抽样概率进行有放回抽样,抽样数量为3。

In [67]: df_sample = pd.DataFrame({'id': list('abcde'),  ....:              'value': [1, 2, 3, 4, 90]})  ....:In [68]: df_sampleOut[68]:  id value0 a   11 b   22 c   33 d   44 e   90In [69]: df_sample.sample(3, replace = True, weights = df_sample.value)Out[69]:  id value4 e   904 e   904 e   90

补充:pandas.DataFrame.sample 随机选取若干行

1、数据切片选取

1.1 pandas.DataFrame.sample 随机选取若干行

1.1.1 功能说明

有时候我们只需要数据集中的一部分,并不需要全部的数据。这个时候我们就要对数据集进行随机的抽样。pandas中自带有抽样的方法。

功能相似:numpy.random.choice

Generates a random sample from a given 1-D numpy array.

1.1.2 使用说明

1.函数名及功能

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)[source]

2.输入参数说明

参数名称 参数说明 举例说明
n 要抽取的行数

df.sample(n=3,random_state=1)
提取3行数据列表
注意,使用random_state,以确保可重复性的例子。

frac

抽取行的比例
例如frac=0.8,就是抽取其中80%。

df.sample(frac=0.8, replace=True, random_state=1)
replace

是否为有放回抽样,
True:有放回抽样
False:未放回抽样

True:取行数据后,可以重复放回后再取
False:取行数据后不放回,下次取其它行数据
注意:当N>总数据容量,replace设置为值时有效

weights

字符索引或概率数组

axis=0:为行字符索引或概率数组
axis=1:为列字符索引或概率数组

random_state

int: 随机数发生器种子
或numpy.random.RandomState

random_state=None,取得数据不重复
random_state=1,可以取得重复数据

axis

选择抽取数据的行还是列
axis=0:抽取行
axis=1:抽取列

也就是说axis=1时,在列中随机抽取n列,在axis=0时,在行中随机抽取n行。

3. 返回值说明

返回选择的N行元素的DataFrame对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。如有错误或未考虑完全的地方,望不吝赐教。


python flask框架详解
pytorch 数据加载性能对比分析
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。