Pandas技巧

Pandas_Select_Data_Sample 随机样本

2020-03-31  本文已影响0人  Kaspar433

Pandas_Select_Data_Sample 随机样本

使用该sample()方法随机选择Series或DataFrame中的行或列。默认情况下,该方法将对行进行采样,并接受要返回的特定行数/列数或一小部分行

import pandas as pd
import numpy as np
​
iris = pd.read_csv('iris.csv')
iris.head()

out:
sepal_length    sepal_width petal_length    petal_width species
0   5.1 3.5 1.4 0.2 setosa
1   4.9 3.0 1.4 0.2 setosa
2   4.7 3.2 1.3 0.2 setosa
3   4.6 3.1 1.5 0.2 setosa
4   5.0 3.6 1.4 0.2 setosa

默认返回一个样本

iris.sample()

out:
sepal_length    sepal_width petal_length    petal_width species
121 5.6 2.8 4.9 2.0 virginica

参数n

可以设置n,用来返回多个数据。

iris.sample(n=3)

out:
sepal_length    sepal_width petal_length    petal_width species
34  4.9 3.1 1.5 0.2 setosa
89  5.5 2.5 4.0 1.3 versicolor
36  5.5 3.5 1.3 0.2 setosa

参数replace

sample()默认每行只出现一次,可以通过replace参数设置出现一次或多次。

iris.sample(n=20,replace=False).index.value_counts()

out:
42     1
29     1
131    1
68     1
101    1
130    1
69     1
104    1
105    1
138    1
77     1
47     1
87     1
49     1
115    1
132    1
6      1
57     1
72     1
66     1
dtype: int64
iris.sample(n=20,replace=True).index.value_counts()

out:
116    2
31     1
140    1
98     1
88     1
132    1
70     1
71     1
8      1
139    1
68     1
148    1
80     1
58     1
51     1
117    1
54     1
24     1
64     1
dtype: int64

参数weights

默认情况下,每行具有相同的选择概率,但如果您希望行具有不同的概率,则可以将sample函数采样权重作为 weights。这些权重可以是列表,NumPy数组或系列,但它们的长度必须与您采样的对象的长度相同。缺失的值将被视为零的权重,并且不允许使用inf值。如果权重不总和为1,则通过将所有权重除以权重之和来对它们进行重新规范化。

s = pd.Series(list(range(5)))
s_weights = [.1, .2, .3, .2, .2]
s_weights2 = [.5, .6, 0, 0, .2]
s.sample(n=4, weights=s_weights)

out:
2    2
4    4
1    1
3    3
dtype: int64
s.sample(n=2, weights=s_weights2)

out:
0    0
1    1
dtype: int64

应用于DataFrame时,只需将列的名称作为字符串传递,就可以使用DataFrame的列作为采样权重(假设您要对行而不是列进行采样)。

iris.sample(n=10, weights='petal_width')

out:
sepal_length    sepal_width petal_length    petal_width species
31  5.4 3.4 1.5 0.4 setosa
118 7.7 2.6 6.9 2.3 virginica
72  6.3 2.5 4.9 1.5 versicolor
136 6.3 3.4 5.6 2.4 virginica
29  4.7 3.2 1.6 0.2 setosa
101 5.8 2.7 5.1 1.9 virginica
126 6.2 2.8 4.8 1.8 virginica
144 6.7 3.3 5.7 2.5 virginica
23  5.1 3.3 1.7 0.5 setosa
99  5.7 2.8 4.1 1.3 versicolor

参数axis

sample还允许用户使用axis参数对列而不是行进行采样。

iris.sample(n=2, axis=1).head()

out:
sepal_length    species
0   5.1 setosa
1   4.9 setosa
2   4.7 setosa
3   4.6 setosa
4   5.0 setosa

参数random_state

可以sample使用random_state参数为随机数生成器设置种子,该参数将接受整数(作为种子)或NumPy RandomState对象。

iris.sample(n=2, random_state=3)

out:
sepal_length    sepal_width petal_length    petal_width species
47  4.6 3.2 1.4 0.2 setosa
3   4.6 3.1 1.5 0.2 setosa
iris.sample(n=2, random_state=5)

out:
sepal_length    sepal_width petal_length    petal_width species
82  5.8 2.7 3.9 1.2 versicolor
134 6.1 2.6 5.6 1.4 virginica
上一篇下一篇

猜你喜欢

热点阅读