音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

pandas之query方法和sample随机抽样操作
日期:2021-09-08 13:41:13   来源:脚本之家

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 Transfer
38  Peking University Freshman    Qiang Han  Male  87.0    N
66  Fudan University  Senior Chengpeng Zhou  Male  81.0    N
99  Peking University Freshman Changpeng Zhao  Male  83.0    N
131  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 Transfer
1        Peking University  Freshman Changqiang You  Male  70.0    N
2  Shanghai Jiao Tong University   Senior     Mei Sun  Male  89.0    N
4        Fudan University Sophomore   Gaojuan You  Male  74.0    N
10 Shanghai Jiao Tong University  Freshman  Xiaopeng Zhou  Male  74.0    N
14      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 Transfer
2  Shanghai Jiao Tong University Senior    Mei Sun  Male  89.0    N
16      Tsinghua University Junior Xiaoqiang Qin  Male  68.0    N
17      Tsinghua University Junior   Peng Wang  Male  65.0    N
18      Tsinghua University Senior  Xiaofeng Sun  Male  71.0    N
21 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 Transfer
2  Shanghai Jiao Tong University Senior    Mei Sun  Male  89.0    N
7       Tsinghua University Junior Gaoqiang Qian Female  50.0    N
9        Peking University Junior    Juan Xu Female   NaN    N
11      Tsinghua University Junior  Xiaoquan Lv Female  43.0    N
12 Shanghai Jiao Tong University Senior    Peng You Female  48.0   NaN

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

In [65]: low, high =70, 80

In [66]: df.query('Weight.between(@low, @high)').head()
Out[66]: 
              School   Grade      Name Gender Weight Transfer
1        Peking University  Freshman Changqiang You  Male  70.0    N
4        Fudan University Sophomore   Gaojuan You  Male  74.0    N
10 Shanghai Jiao Tong University  Freshman  Xiaopeng Zhou  Male  74.0    N
18      Tsinghua University   Senior  Xiaofeng Sun  Male  71.0    N
35       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_sample
Out[68]: 
 id value
0 a   1
1 b   2
2 c   3
3 d   4
4 e   90

In [69]: df_sample.sample(3, replace = True, weights = df_sample.value)
Out[69]: 
 id value
4 e   90
4 e   90
4 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对象。

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

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程