Pandas数据中列表转换成列随机抽样数据的方法实践经验两则

Posted 肖永威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas数据中列表转换成列随机抽样数据的方法实践经验两则相关的知识,希望对你有一定的参考价值。

1. Pandas数据中列表转换成列

最近,使用Mongo DB聚合分组查询时,对于超过1列(字段)时,分组查询结果反馈到Pandas的DataFrame中,表现为list数据。

例如:

import pandas as pd
import numpy as np

df = pd.DataFrame('_id':[[1,0],[3,5]],'data':[2,5])
df
	_id	data
	0	[1, 0]	2
	1	[3, 5]	5
new_col = df['_id']
new_col
	0    [1, 0]
	1    [3, 5]
	Name: _id, dtype: object
new_col = df['_id']
new_col = np.array(new_col.tolist()).T # 转置
new_col
	array([[1, 3],
	       [0, 5]])
df['A'] = new_col[0]
df['B'] = new_col[1]
df

最终,提取的数据列如下所示:

	_id	data	A	B
	0	[1, 0]	2	1	0
	1	[3, 5]	5	3	5

2. Pandas随机抽样

2.1. np.random.permutation():随机排列序列

import numpy as np
df = df.reindex(np.random.permutation(df.index))
df

2.2. pandas之df.sample

df.sample()用于从dataframe或者series中,随机取样。

官方文档:
DataFrame.sample(self: ~ FrameOrSeries, n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

参数详解

  • n:int
    从数据集中随机选取n行数据,不能和frac参数同时使用。如果frac=None,那么n默认为1
  • frac:float
    从数据集中选取一定比例的数据,不能和n同时使用。如果frac>1,replace必须为True
  • replace:bool,default False
    是否允许重复取样,即一条数据多次选取。默认为否
  • weight:str or narray-like
    为每条数据添加权重。默认为None。如果axis = 0,可以直接使用某一列为权重。除非权重的类型为series,否则权重的长度必须和数据集中所用轴方向的(axis=0 or )一样长。如果权重和大于一,则会归一化为1。
  • random_state:int or numpy.random.randomstate
    随机数种子
  • axis:
    选择轴向,0(index)或者1(columns),默认是0

举例

import pandas as pd
df = pd.DataFrame('name': ['董国建','苏炳添','彭建华','张德顺','葛曼棋','仁青东知布'],
                   'gender': ['男','男','男','女','女','男'],
                   'age':[34,31,24,25,24,20],
                   'sport':['马拉松','百米','马拉松','马拉松','百米','马拉松'])
df
df1 = df.sample(n=3)
df1
df3 = df.sample(frac=0.5)
df2
df4 = df.sample(frac=1)
df4

注:随机取样,如果frac=1.0,则可实现打乱排序的效果

2.3. 取反例

Pandas中isin是series中的一个函数,用于查看某列中是否包含某个字符串,返回值为布尔Series,来表明每一行的情况。

使用 “~” 表示取反,提取取样过的数据集。

例如:

df2 = df[~df.index.isin(df1.index)]
df2

参数:

[1]. XerCis. pandas将list数据拆分成行或列的实现. 脚本之家. 2020.12
[2]. 非昨. pandas学习之df.sample. CSDN博客. 2020.06

以上是关于Pandas数据中列表转换成列随机抽样数据的方法实践经验两则的主要内容,如果未能解决你的问题,请参考以下文章

Pandas数据中列表转换成列随机抽样数据的方法实践经验两则

pandas对dataframe的数据行进行随机抽样(Random Sample of Rows):使用sample函数进行数据行随机抽样(有放回的随机抽样,replacement)

pandas对dataframe的数据列进行随机抽样(Random Sample of Columns)使用sample函数进行数据列随机抽样

pandas中sample方法简介

怎么把pandas multiindex转换成列

pandas使用query函数和sample函数使用query函数筛选dataframe中的特定数据行并使用sample函数获取指定个数的随机抽样数据