数据分箱就是按照某种规则将数据进行分类。就像可以将水果按照大小进行分类,售卖不同的价格一样。
创建一个整形随机的series,表示学生的成绩:
import numpy as np import pandas as pd from pandas import Series, DataFrame score_list = np.random.randint(25, 100, size=20)
12345 | import numpy as npimport pandas as pdfrom pandas import Series, DataFramescore_list = np.random.randint(25, 100, size=20) |
---|
然后指定一个分箱原则
bins = [0,59,70,80,100]
12 | bins = [0,59,70,80,100] |
---|
然后利用pandas中的cut方法,指定分箱规则和对象,结果将获得一个Categories对象:
score_cat = pd.cut(score_list, bins)
12 | score_cat = pd.cut(score_list, bins) |
---|
使用pandas中的value_counts方法来统计各个段内数据的个数:
pd.value_counts(score_cat)
12 | pd.value_counts(score_cat) |
---|
创建一个包含学生分数和姓名的dataframe:
df = DataFrame() df['score'] = score_list df['student'] = [pd.util.testing.rands(3) for i in range(20)] # 三个随机字符串
1234 | df = DataFrame() df['score'] = score_listdf['student'] = [pd.util.testing.rands(3) for i in range(20)] # 三个随机字符串 |
---|
这里的pd.util.testing.rands(3) for i in range(20)可以生成20个随机3位字符串。
然后使用前面的bins标准对df1进行分箱,得到一个Categories对象:
df['Categories'] = pd.cut(df['score'],bins)
12 | df['Categories'] = pd.cut(df['score'],bins) |
---|
这样子可读性不好,可以指定label参数为每个区间赋一个标签:
df['Categories'] = pd.cut(df['score'],bins, labels=['Low','OK','Good','Great'])
12 | df['Categories'] = pd.cut(df['score'],bins, labels=['Low','OK','Good','Great']) |
---|