关于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 版本。
相关方法:
➡️ 相关方法
Generates random samples from each group of a DataFrame object.
Generates random samples from each group of a Series object.
Generates a random sample from a given 1-D numpy array.
示例:
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
示例:随机抽取3条数据
import pandas as pd
df = pd.read_excel(r'../../../../数据集/团队成员季度销售额.xlsx')
# 随机抽取3条数据
df.sample(3)
姓名 | 片区 | 1季度 | 2季度 | 3季度 | 4季度 | year | |
---|---|---|---|---|---|---|---|
73 | 庄海彬 | 华中 | 2534 | 968 | 4128 | 5454 | 2023 |
12 | 邹邹 | 华南 | 2202 | 3692 | 2275 | 9233 | 2023 |
43 | 自在 | 华北 | 2354 | 4605 | 5928 | 8614 | 2023 |
示例:随机抽取10%的数据
import pandas as pd
df = pd.read_excel(r'../../../../数据集/团队成员季度销售额.xlsx')
# 随机抽取10%条数据
df.sample(frac=0.1)
姓名 | 片区 | 1季度 | 2季度 | 3季度 | 4季度 | year | |
---|---|---|---|---|---|---|---|
44 | 自由自在 | 华北 | 3884 | 6625 | 6944 | 8639 | 2023 |
4 | 左美华 | 华南 | 579 | 2944 | 3408 | 7365 | 2023 |
0 | 左院梅 | 华南 | 1491 | 1083 | 5000 | 9461 | 2023 |
67 | 庄晓运 | 华中 | 5308 | 7153 | 2622 | 5929 | 2023 |
92 | 邹世军 | 华中 | 4343 | 4866 | 2743 | 7617 | 2023 |
23 | 邹女士 | 华南 | 2777 | 5511 | 2411 | 5243 | 2023 |
5 | 左梅香 | 华南 | 3375 | 1636 | 1313 | 8453 | 2023 |
32 | 邹建华 | 华北 | 2025 | 1511 | 6058 | 3362 | 2023 |
49 | 紫罗兰 | 华北 | 4493 | 2669 | 3630 | 6095 | 2023 |
50 | 梓英 | 华中 | 4674 | 4070 | 7204 | 8626 | 2023 |
示例:指定随机种子,用这个种子再次生成随机采样,可以生成一样的数据
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