pandas.DataFrame.sample#

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None, ignore_index=False)[源代码]#

从对象的轴返回随机样本项。

您可以使用 random_state 来实现可重现性。

参数:
nint, optional

要返回的轴上的项目数。不能与 frac 一起使用。如果 frac = None,则默认为 1。

fracfloat, optional

要返回的轴上项目的比例。不能与 n 一起使用。

replacebool, default False

允许或禁止对同一行进行多次抽样。

weightsstr 或 ndarray-like,可选

默认 None 表示均等概率加权。如果传递了 Series,它将与目标对象在索引上对齐。weights 中未在 sampled object 中找到的索引值将被忽略,而 sampled object 中未在 weights 中的索引值将被赋予零权重。如果作用于 DataFrame,当 axis = 0 时,可以接受列名。除非 weights 是 Series,否则 weights 必须与正在采样的轴具有相同的长度。如果 weights 的总和不为 1,它们将被归一化为总和为 1。weights 列中的缺失值将被视为零。不允许使用无穷值。当 replace = False 时,不允许 (n * max(weights) / sum(weights)) > 1,以避免产生有偏见的结果。有关更多详细信息,请参阅下面的 Notes。

random_stateint, array-like, BitGenerator, np.random.RandomState, np.random.Generator, optional

如果为 int、array-like 或 BitGenerator,则为随机数生成器的种子。如果为 np.random.RandomState 或 np.random.Generator,则按给定的使用。默认值 None 表示使用 np.random 的当前状态进行抽样。

axis{0 或 ‘index’, 1 或 ‘columns’, None}, 默认为 None

要采样的轴。接受轴编号或名称。对于给定的数据类型,默认为统计轴。对于 Series,此参数未使用,默认为 None

ignore_indexbool, default False

如果为 True,则结果索引将标记为 0, 1, …, n - 1。

返回:
Series 或 DataFrame

与调用者类型相同的、包含从调用者对象中随机抽样的 n 个项目的、新对象。

另请参阅

DataFrameGroupBy.sample

从 DataFrame 对象的每个组生成随机样本。

SeriesGroupBy.sample

从 Series 对象的每个组生成随机样本。

numpy.random.choice

从给定的 1-D numpy 数组生成随机样本。

注意

如果 frac > 1,则应将 replacement 设置为 True

当 replace = False 时,不允许 (n * max(weights) / sum(weights)) > 1,因为这会导致结果有偏见。例如,在不替换的情况下,用权重 [100, 1, 1] 对 2 个项目进行采样,在 1/2 的情况下会得到最后两个项目,而不是 1/102。这类似于在具有 3 个元素的 Series 上指定不替换 n=4

示例

>>> df = pd.DataFrame(
...     {
...         "num_legs": [2, 4, 8, 0],
...         "num_wings": [2, 0, 0, 0],
...         "num_specimen_seen": [10, 2, 1, 8],
...     },
...     index=["falcon", "dog", "spider", "fish"],
... )
>>> df
        num_legs  num_wings  num_specimen_seen
falcon         2          2                 10
dog            4          0                  2
spider         8          0                  1
fish           0          0                  8

Series df['num_legs'] 中提取 3 个随机元素:注意,我们使用 random_state 来确保示例的可重复性。

>>> df["num_legs"].sample(n=3, random_state=1)
fish      0
spider    8
falcon    2
Name: num_legs, dtype: int64

带替换的 DataFrame 的随机 50% 样本

>>> df.sample(frac=0.5, replace=True, random_state=1)
      num_legs  num_wings  num_specimen_seen
dog          4          0                  2
fish         0          0                  8

带替换的 DataFrame 的过采样样本:注意,对于 frac 参数 > 1,replace 参数必须为 True

>>> df.sample(frac=2, replace=True, random_state=1)
        num_legs  num_wings  num_specimen_seen
dog            4          0                  2
fish           0          0                  8
falcon         2          2                 10
falcon         2          2                 10
fish           0          0                  8
dog            4          0                  2
fish           0          0                  8
dog            4          0                  2

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

>>> df.sample(n=2, weights="num_specimen_seen", random_state=1)
        num_legs  num_wings  num_specimen_seen
falcon         2          2                 10
fish           0          0                  8