Pandas.DataFrame.sample() 随机抽样 详解 含代码 含测试数据集 随Pandas版本持续更新

本文详细解释了Pandas库中DataFrame.sample()函数的语法、参数含义及其在数据分析中的应用,包括指定抽样数量、比例、重复选项以及权重,还展示了如何控制随机性和使用新版本中的ignore_index功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Pandas版本: 本文基于 pandas2.2.0 编写。

关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。

传送门: Pandas API参考目录

传送门: Pandas 版本更新及新特性

传送门: Pandas 由浅入深系列教程

Pandas.DataFrame.sample()

DataFrame.sample 是Pandas库中的一个方法,用于从DataFrame对象的指定轴(行或列,默认为行)中随机抽取一些项目,并返回一个新的Series或DataFrame对象,其中包含这些随机抽取的项目。以下是该方法的主要参数和用法:

语法:

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None, ignore_index=False)

返回值:

  • Series or DataFrame

参数说明:

n 指定返回数据的数量,可选参数。

n:int, optional

  • 要从轴中返回的项目数量,可选参数。
  • 如果指定了 n ,则不能同时使用 frac。
  • 默认情况下,如果未提供frac,则n默认为1,即默认返回一个项目。

frac 按比例返回数据,可选参数。

frac:float, optional

  • 要从轴中返回的项目的比例,可选参数。
  • 如果指定了 frac ,则不能同时使用 n
  • frac 的值应该是一个小数,表示要返回的项目占轴上项目总数的比例。

replace 是否允许对同一行(或列)进行多次抽样

replace:bool, default False

  • 一个布尔值,表示是否允许对同一行(或列)进行多次抽样。
  • 如果设置为True,则可能多次抽样相同的行(或列)
  • 如果设置为False,则不允许多次抽样相同的行(或列)。

注意:当frac > 1 ,replace必须为True

weights 用于指定抽样时的权重

weights:str or ndarray-like, optional

一个字符串或类似ndarray的对象,可选参数。用于指定抽样时的权重。默认情况下,所有项目具有相等的抽样概率。你可以通过提供权重来改变抽样概率,例如,你可以为不同的行或列分配不同的权重。

使用DataFrame列作为权重,列中值较大的行更有可能被采样。

random_state 随机数生成器的种子

random_state:int, array-like, BitGenerator, np.random.RandomState, np.random.Generator, optional

一个整数、array-like、BitGenerator、np.random.RandomState、np.random.Generator或None,可选参数。用于控制随机数生成器的种子,以确保结果的可重现性。

📌 改动于 Pandas 1.4.0 :

接受 np.random.Generator对象的传入

axis 指定要从哪个轴上进行抽样

axis:{0 or ‘index’, 1 or ‘columns’, None}, default None

指定要从哪个轴上进行抽样,可以是0(表示行)或1(表示列),也可以使用’index’或’columns’来表示。默认为None,表示根据数据类型的统计轴进行抽样。

ignore_inde 是否在返回的结果中忽略索引

ignore_index:bool, default False

一个布尔值,表示是否在返回的结果中忽略索引。
如果设置为True,返回的结果将不再使用原来的索引。会重新应用一个具有默认的0到n-1的整数索引。

新增于 Pandas 1.3.0 : ignore_inde 参数,新增于Pandas 1.3.0 版本。

相关方法:

➡️ 相关方法


示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

测试文件下载位置.png

示例:随机抽取3条数据

import pandas as pd

df = pd.read_excel(r'../../../../数据集/团队成员季度销售额.xlsx')

# 随机抽取3条数据
df.sample(3)
姓名片区1季度2季度3季度4季度year
73庄海彬华中2534968412854542023
12邹邹华南22023692227592332023
43自在华北23544605592886142023

示例:随机抽取10%的数据

import pandas as pd

df = pd.read_excel(r'../../../../数据集/团队成员季度销售额.xlsx')

# 随机抽取10%条数据
df.sample(frac=0.1)
姓名片区1季度2季度3季度4季度year
44自由自在华北38846625694486392023
4左美华华南5792944340873652023
0左院梅华南14911083500094612023
67庄晓运华中53087153262259292023
92邹世军华中43434866274376172023
23邹女士华南27775511241152432023
5左梅香华南33751636131384532023
32邹建华华北20251511605833622023
49紫罗兰华北44932669363060952023
50梓英华中46744070720486262023

示例:指定随机种子,用这个种子再次生成随机采样,可以生成一样的数据

import pandas as pd

df = pd.read_excel(r'../../../../数据集/团队成员季度销售额.xlsx')

# 指定随机种子,用这个种子再次生成随机采样,可以生成一样的数据
df_2 = df.sample(3, random_state=2)
df_3 = df.sample(3, random_state=2)

print('*' * 40)
print(df_2)
print('*' * 40)
print(df_3)

姓名 片区 1季度 2季度 3季度 4季度 year
83 祝海英 华东 1018 1430 4845 7155 2023
30 邹杰 华北 1300 5676 2430 8934 2023
56 子菡 华中 945 7019 2060 5594 2023


姓名 片区 1季度 2季度 3季度 4季度 year
83 祝海英 华东 1018 1430 4845 7155 2023
30 邹杰 华北 1300 5676 2430 8934 2023
56 子菡 华中 945 7019 2060 5594 2023

示例:ignore_index=True,会使用新的整数索引

import pandas as pd

df = pd.read_excel(r'../../../../数据集/团队成员季度销售额.xlsx')
print('原始df:\n', df)

# ignore_index=True,会使用新的整数索引
df_2 = df.sample(3, random_state=2,ignore_index=True)
df_3 = df.sample(3, random_state=2)

print('*' * 40)
print('ignore_index=True的df_2\n\n', df_2)
print('*' * 40)
print('df_3\n\n', df_3)

原始df:
姓名 片区 1季度 2季度 3季度 4季度 year
0 左院梅 华南 1491 1083 5000 9461 2023
1 左艳艳 华南 1106 5762 3439 2359 2023
2 左薇 华南 2912 3830 1779 2385 2023
3 左娜 华南 2099 6973 4185 3472 2023
4 左美华 华南 579 2944 3408 7365 2023
… … … … … … … …
95 张华丽 华北 4584 1072 3029 8976 2023
96 张华林 华中 1872 3751 2831 4213 2023
97 王娟 华南 661 6784 3660 8621 2023
98 刘贤 华东 3960 6437 3148 1517 2023
99 王瑾 华北 965 4251 6160 1136 2023
[100 rows x 7 columns]
****************************************

ignore_index=True的df_2
姓名 片区 1季度 2季度 3季度 4季度 year
0 祝海英 华东 1018 1430 4845 7155 2023
1 邹杰 华北 1300 5676 2430 8934 2023
2 子菡 华中 945 7019 2060 5594 2023
****************************************

df_3
姓名 片区 1季度 2季度 3季度 4季度 year
83 祝海英 华东 1018 1430 4845 7155 2023
30 邹杰 华北 1300 5676 2430 8934 2023
56 子菡 华中 945 7019 2060 5594 2023

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数象限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值