cut函数可以给序列分组,比如把年龄,成绩进行分组,统计不同分组内的人数有多少,等等。
函数结构如下:
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
x:要分箱的输入数组。它必须是一维的。
bin:int或标量序列
如果bins是一个int,它定义在x范围内的等宽单元的数量。然而,在这种情况下,x的范围在每一侧延伸0.1%以包括x的最小值或最大值。如果bin是一个序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下不进行x的范围的扩展。
right:bool,可选
决定区间的开闭,如果right == True(默认),则区间[1,2,3,4]指示(1,2],(2,3],(3,4]。
labels:array或boolean,默认值为无
用作生成的区间的标签。必须与生成的区间的长度相同。如果为False,则只返回bin的整数指示符。
retbins:bool,可选
是否返回bin。如果bin作为标量给出,则可能有用。
precision:int
存储和显示容器标签的精度
include_lowest:bool
第一个间隔是否应该包含左边。
对学生的成绩grades进行分类。
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
grades = [20, 60, 44, 76, 85 , 99 , 95, 100, 66, 77, 88]
bins = [0, 60, 80, 100.1]
cats = pd.cut(grades, bins, right=False)#左闭右开
print(cats)
count_num = cats.value_counts()
print(count_num)#统计不同区间内的学生人数
print(type(count_num))#Series类
print(count_num.index)
代码结果如下:
[[0.0, 60.0), [60.0, 80.0), [0.0, 60.0), [60.0, 80.0), [80.0, 100.1), ..., [80.0, 100.1), [80.0, 100.1), [60.0, 80.0), [60.0, 80.0), [80.0, 100.1)]
Length: 11
Categories (3, interval[float64]): [[0.0, 60.0) < [60.0, 80.0) < [80.0, 100.1)]
#统计各区间内数量
[0.0, 60.0) 2
[60.0, 80.0) 4
[80.0, 100.1) 5
dtype: int64
<class 'pandas.core.series.Series'>
CategoricalIndex([[0.0, 60.0), [60.0, 80.0), [80.0, 100.1)], categories=[[0.0, 60.0), [60.0, 80.0), [80.0, 100.1)], ordered=True, dtype='category')
可以发现,cats.value_counts()返回值是一个Series,它的index很特殊,是这样的:
CategoricalIndex([[0.0, 60.0), [60.0, 80.0), [80.0, 100.1)], categories=[[0.0, 60.0), [60.0, 80.0), [80.0, 100.1)], ordered=True, dtype=’category’)。
如果,某个DF的 index 索引是这种类型的,在使用DF.to_excel()让它生成excel时,会报错,可以把 index 先转化成 str 格式的,再生成excel。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。