为了便于分析, 连续数据常常被离散化或拆分为“面元”(bin)。假设有一组人员数据, 而你希望将他们划分为不同的年龄组:

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

接下来将这些数据划分为“18到25”, 26-35, 35-60, 60以上几个面元。要实现该功能,需要pandas的cut函数:

cut

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

bins = [18, 25, 35, 60, 100]

cats = pd.cut(ages, bins)

print(cats)

 

pandas返回的是一个特殊的Categorical对象。你可以将其看作一组表示面元名称的字符串。实际上它含义一个表示不同分类名称的levels数组以

及一个为年龄数据进行标号的labels属性。, 以及各个阶段人的数量统计

特别注意,已经取消的levels,而且labels将被替换成codes

print(cats.labels)
print(cats.codes)
print(pd.value_counts(cats))

离散化和面元划分(可以理解为划分段)

调整区间符号

 跟“区间”的数学符号一样, 圆括号表示开端, 而方括号表示闭端(包括)。哪边是闭端可以通过right=False进行修改:

离散化和面元划分(可以理解为划分段)

自定义面元名称--可以结合value_counts使用

自定义面元名称, 将labels选项设置为一个列表或数组即可:

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]

bins = [18, 25, 35, 60, 100]

print(pd.cut(ages, bins, labels=[i for i in "abcd"]))

离散化和面元划分(可以理解为划分段)

 

 如果不确定面元切面怎么办

 如果向cut传入的是面元数量而不是确切的面元边界, 则它会根据数据的最小值和最大值计算等长面元。看例子, 分4组

data = np.random.rand(20)

ret = pd.cut(data, 4, precision=2)

print(ret)

离散化和面元划分(可以理解为划分段)

 

 qcut 是一个非常类似于cut的函数, 它可以根据样本分位数对数据进行面元划分。

data = np.random.randn(1000)  #正泰分布

cats = pd.qcut(data, 4) #按四分位数进行切割

print(cats)
print(pd.value_counts(cats))

离散化和面元划分(可以理解为划分段)

 感觉那里怪怪的,下面这个

 离散化和面元划分(可以理解为划分段)

 

相关文章:

  • 2021-12-01
  • 2021-10-30
  • 2021-09-07
  • 2021-07-09
  • 2021-05-21
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-03
  • 2021-07-09
  • 2021-11-20
相关资源
相似解决方案