zoukankan      html  css  js  c++  java
  • pandas的离散化,面元划分

    pd.cut

    pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
    1. x要分箱的输入数组,必须是一维的
    2. bins:int或标量序列
      • 若bins是一个int,它定义在x范围内的等宽单元的数量。然而,在这种情况下,x的范围在每一侧延伸0.1%以包括x的最小值或最大值
      • bins是一个序列,它定义了允许非均匀bin宽度的bin边缘。在这种情况下不进行x的范围的扩展
    1. right:bool,可选:决定区间的开闭,如果right == True(默认),则区间[1,2,3,4]指示(1,2],(2,3],(3,4]
    2. labels:array或boolean,默认值为无:用作生成的区间的标签。必须与生成的区间的长度相同。如果为False,则只返回bin的整数指示符
    3. retbins:bool,可选:是否返回bin。如果bin作为标量给出,则可能有用
    4. precision:int:存储和显示容器标签的精度,默认保留三位小数
    5. include_lowest:bool:第一个间隔是否应该包含左边
     1 import numpy as np
     2 import pandas as pd
     3 # 使用pandas的cut函数划分年龄组
     4 ages = [20,22,25,27,21,23,37,31,61,45,32]
     5 bins = [18,25,35,60,100]
     6 cats = pd.cut(ages,bins)
     7 print(cats)  # 分类时,当数据不在区间中将变为nan
     8 # 统计落在各个区间的值数量
     9 print(pd.value_counts(cats))
    10 # 使用codes为年龄数据进行标号
    11 print(cats.codes)
    12 # 设置自己想要的面元名称
    13 group_names = ['Youth','YoungAdult','MiddleAged','Senior']
    14 print(pd.cut(ages, bins, labels=group_names))
    15 # 设置区间数学符号为左闭右开
    16 print(pd.cut(ages, bins, right=False))
    17 # 向cut传入面元的数量,则会根据数据的最小值和最大值计算等长面元
    18 print(pd.cut(ages, 4, precision=2))  # precision=2表示设置的精度

    pd.qcut

    与cut类似,它可以根据样本分位数对数据进行面元划分

    pandas.qcut(x, q, labels=None, retbins=False, precision=3)  
    1. x:ndarray或Series
    2. q:整数或分位数阵列分位数。十分位数为10,四分位数为4或者,分位数阵列,例如[0,.25,.5,.75,1.]四分位数
    3. labels:array或boolean,默认值为无:用作生成的区间的标签。必须与生成的区间的长度相同。如果为False,则只返回bin的整数指示符。
    4. retbins:bool,可选:是否返回bin。如果bin作为标量给出,则可能有用。
    5. precision:int:存储和显示容器标签的精度
     1 import numpy as np
     2 import pandas as pd
     3 
     4 # qcut可以根据样本分位数对数据进行面元划分
     5 # data = np.random.randn(20)  # 正态分布
     6 data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
     7 cats = pd.qcut(data, 4)  # 按四分位数进行切割
     8 print(cats)
     9 print(pd.value_counts(cats))
    10 print("-------------------------------------------------")
    11 # 通过指定分位数(0到1之间的数值,包含端点)进行面元划分
    12 cats_2 = pd.qcut(data, [0, 0.5, 0.8, 0.9, 1])
    13 print(cats_2)
    14 print(pd.value_counts(cats_2))
  • 相关阅读:
    周末之个人杂想(十三)
    PowerTip of the DaySorting Multiple Properties
    PowerTip of the DayCreate Remoting Solutions
    PowerTip of the DayAdd Help to Your Functions
    PowerTip of the DayAcessing Function Parameters by Type
    PowerTip of the DayReplace Text in Files
    PowerTip of the DayAdding Extra Information
    PowerTip of the DayPrinting Results
    Win7下IIS 7.5配置SSAS(2008)远程访问
    PowerTip of the DayOpening Current Folder in Explorer
  • 原文地址:https://www.cnblogs.com/fuqia/p/9011047.html
Copyright © 2011-2022 走看看