赞
踩
在对数据进行处理分析时,有时需要对csv等表格数据中的某列数据进行分组,或者按数值大小重新分为几个类别,如需要将班级学生的成绩按<60,60-75,75-90,>90分为不及格,中,良,优四个等级,就可以利用python中的pandas工具,即pd.cut进行处理。
我们先通过一个实例来简单看看。abc这列数据的数值在 [ 0.01, 0.990 ] 区间内,按数值大小分为5个类别,分类之后的标签用'a', 'd', 'c', 'd', 'e'表示。
- import pandas as pd # 导入需要用到的包pandas
-
- # 读取csv数据
- df = pd.read_csv(r'F:\python\temp.csv')
-
- # 读取需要进行分组的某列
- df1 = df['abc']
- df2 = df['sdf']
- df3 = df['dgd']
- df4 = df['mjh']
- df5 = df['bq']
-
- bins = [0,0.2,0.4,0.6,0.8,1] # bins是进行分组的依据,取整数,标量序列或者间隔索引
- labels=['a','b','c','d','e'] # 分组对应的标签,比bins少一个
-
- # 使用pandas中的cut进行数值分组
- df1 = pd.cut(df1,bins=bins,labels=labels)
-
- # 分组之后类别dtype变为'category',如果需要写入csv中需要变为'str'字符串类型
- df1 = pd.DataFrame(df1, dtype='str')
-
- # 将分组之后的新标签写入数据中,利用pd.concat进行拼接合并,axis=1表示左右拼接
- df = pd.concat([df1, df2,df3,df4,df5],axis=1)
-
- # 写入csv文件
- df.to_csv(r'F:\temp.csv',index= False, header= False)
下面是关于函数的具体介绍。
- pandas.cut(x, bins, right=True, labels=None,
- retbins=False, precision=3, include_lowest=False,
- duplicates='raise', ordered=True)
x:输入数组。必须是一维的。
bins:分组的依据。可以是整数(int),标量序列或间隔索引。
① 整数,表示将x中的数值分成等宽的n份(即每一组内的最大值与最小值之差约相等);
② 标量序列,序列中的数值表示用来分档的分界值;
③ 间隔索引,' bins' 的间隔索引必须不重叠。
right:分箱是否包含最右边。bool布尔值,默认为True。
① right = True, bins = [1, 2, 3, 4]表示 (1,2], (2,3], (3,4],区间为左开右闭。
② 当 bins 是间隔索引时,忽略此参数。
labels:指定返回的箱的标签。数组或 False,默认值为“None”。
① 如果是数组,长度要与分箱个数一致,比如 bins =[1, 2, 3, 4] 表示 (1,2], (2,3], (3,4],一共3个区间,则labels的长度也就是标签的个数也要是3。
② 如果为False,则仅返回分箱的整数指示符,即 x 中的数据在第几个箱子里。
③ 当bins是间隔索引时,将忽略此参数。
retbins:是否显示分箱的分界值。bool布尔值,默认值为 False。
当bins取整数时可以设置retbins=True以显示分界值,得到划分后的区间。
precision:存储和显示分箱标签的精度。整数,默认值为3。
include_lowest:表示区间的左边是开还是闭。布尔值,默认为false,也就是不包含区间左边。
duplicates:如果分箱临界值不唯一,则引发ValueError或丢弃非唯一。
ordered:标签是否排序。bool布尔值,默认值为True。
适用于返回的类型分类和系列(具有分类 dtype)。如果为True, 生成的分类将被排序。如果为 False,则结果为分类将是无序的(必须提供标签)。
返回 return
输出output:一个类似数组的对象,表示每个值的相应箱的 x。类型取决于labels的值。Categorical, Series, 或ndarray。
① None (默认值):返回系列 x 的系列或所有其他输入的分类。以间隔类型的值存储。
② 标量序列:返回序列 x 或 所有其他输入的分类。以序列中的任何类型的值存储。
③ False : 返回整数数组。
bins:计算或指定的箱。numpy.ndarray 或 IntervalIndex。
仅当 retbins=True 时才返回。 对于标量或序列bins,这是一个具有计算bins。如果设置duplicates=drop,则bins将删除非唯一bins。如果是一个间隔索引 bins,则等于bins。
笔记
结果中的任何 NA 值都将为 NA。越界值将在 NA 中 生成的系列或分类对象。
参考网页:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。