Pandas_Select_Data_Sample 隨機(jī)樣本
使用該sample()方法隨機(jī)選擇Series或DataFrame中的行或列挤茄。默認(rèn)情況下臭胜,該方法將對(duì)行進(jìn)行采樣蚜厉,并接受要返回的特定行數(shù)/列數(shù)或一小部分行
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
默認(rèn)返回一個(gè)樣本
iris.sample()
out:
sepal_length sepal_width petal_length petal_width species
121 5.6 2.8 4.9 2.0 virginica
參數(shù)n
可以設(shè)置n,用來(lái)返回多個(gè)數(shù)據(jù)郎嫁。
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
參數(shù)replace
sample()默認(rèn)每行只出現(xiàn)一次捡硅,可以通過(guò)replace參數(shù)設(shè)置出現(xiàn)一次或多次哮内。
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
參數(shù)weights
默認(rèn)情況下,每行具有相同的選擇概率壮韭,但如果您希望行具有不同的概率北发,則可以將sample函數(shù)采樣權(quán)重作為 weights。這些權(quán)重可以是列表喷屋,NumPy數(shù)組或系列琳拨,但它們的長(zhǎng)度必須與您采樣的對(duì)象的長(zhǎng)度相同。缺失的值將被視為零的權(quán)重逼蒙,并且不允許使用inf值从绘。如果權(quán)重不總和為1,則通過(guò)將所有權(quán)重除以權(quán)重之和來(lái)對(duì)它們進(jìn)行重新規(guī)范化是牢。
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
應(yīng)用于DataFrame時(shí)僵井,只需將列的名稱作為字符串傳遞,就可以使用DataFrame的列作為采樣權(quán)重(假設(shè)您要對(duì)行而不是列進(jìn)行采樣)驳棱。
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
參數(shù)axis
sample還允許用戶使用axis參數(shù)對(duì)列而不是行進(jìn)行采樣批什。
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
參數(shù)random_state
可以sample使用random_state參數(shù)為隨機(jī)數(shù)生成器設(shè)置種子,該參數(shù)將接受整數(shù)(作為種子)或NumPy RandomState對(duì)象社搅。
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