Pandas排列和随机采样

2023-05-18,,

随机重排序

import pandas as pd
import numpy as np
from pandas import Series df = pd.DataFrame(np.arange(5*4).reshape(5,4))
df 0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19

shuffle 的参数只能是 array_like,而 permutation 除了 array_like 还可以是 int 类型,如果是 int 类型,那就随机打乱 numpy.arange(int)。

sampler = np.random.permutation(5)
sampler array([1, 2, 0, 4, 3])

shuffle 返回 None,这点尤其要注意,也就是说没有返回值,而 permutation 则返回打乱后的 array。

list1 = [1,2,3,4,5]
result = np.random.shuffle(list1)
list1 [2, 5, 4, 1, 3] df.take(sampler) 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
0 0 1 2 3
4 16 17 18 19 # 随机采样,取前三行
df.take(np.random.permutation(len(df))[:3]) 0 1 2 3
4 16 17 18 19
2 8 9 10 11
3 12 13 14 15

计算指标/哑变量

将分类变量转换为哑变量矩阵或指标矩阵,如果DataFrame的某一列中含有K个不同的值,

则可以派生出一个K列矩阵或DataFrame(其值全为1和0)

df = pd.DataFrame({'key':['b','b','a','c','a','b'],
'data1':range(6)
})
df key data1
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 b 5 # 给列加上前缀,get_dummies的prefix参数可以实现该功能
dummies = pd.get_dummies(df['key'],prefix='qianzui')
dummies qianzui_a qianzui_b qianzui_c
0 0 1 0
1 0 1 0
2 1 0 0
3 0 0 1
4 1 0 0
5 0 1 0 # Series对象是没有join方法的,必须是dataframe
df[['data1']].join(dummies) data1 qianzui_a qianzui_b qianzui_c
0 0 0 1 0
1 1 0 1 0
2 2 1 0 0
3 3 0 0 1
4 4 1 0 0
5 5 0 1 0

Pandas排列和随机采样的相关教程结束。

《Pandas排列和随机采样.doc》

下载本文的Word格式文档,以方便收藏与打印。