看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
数据分箱(Data binning,也称为离散组合或数据分桶)是一种数据预处理技术,将原始数据分成小区间,即一个 bin(小箱子),它是一种量子化的形式。
Pandas 实现连续数据的离散化处理主要基于两个函数:
pandas.cut
根据指定分界点对连续数据进行分箱处理pandas.qcut
根据指定箱子的数量对连续数据进行等宽分箱处理注:所谓等宽指的是每个箱子中的数据量是相同的。
pd.cut
可以指定区间将数字进行划分,以下三个值将数据划分成两个区间(及格或者不及格):
pd.cut(df.Q1, bins=[0, 60, 100])
'''
0 (60, 100]
1 (0, 60]
...
98 (0, 60]
99 (0, 60]
Name: Q1, Length: 100, dtype: category
Categories (2, interval[int64]): [(0, 60] < (60, 100]]
'''
应用到分组中:
df.Q1.groupby(pd.cut(df.Q1, bins=[0, 60, 100])).count()
'''
Q1
(0, 60] 57
(60, 100] 43
Name: Q1, dtype: int64
'''
df.groupby(pd.cut(df.Q1, bins=[0, 60, 100])).count()
按区间做映射的例子:
df = pd.DataFrame({'A':[1, 3, 5, 7, 9]})
df.assign(B=pd.cut(df.A, [0,5,7, float('inf')],
labels=['差','中','好'])
)
'''
A B
0 1 差
1 3 差
2 5 差
3 7 中
4 9 好
'''
其他参数:
# 不用区间,使用数字做为标签(0,1,2,n)
pd.cut(df.Q1, bins=[0, 60, 100],labels=False)
# 指定标签名
pd.cut(df.Q1, bins=[0, 60, 100],labels=['不及格','及格',])
# 包含最低部分
pd.cut(df.Q1, bins=[0, 60, 100], include_lowest=True)
# 是否包含右边,闭区间,下例 [89, 100)
pd.cut(df.Q1, bins=[0, 89, 100], right=False)
pd.qcut 指定所分箱子的数量,pandas 会自动进行分箱:
pd.qcut(df.Q1,q=2)
'''
0 (51.5, 98.0]
1 (0.999, 51.5]
...
98 (0.999, 51.5]
99 (0.999, 51.5]
Name: Q1, Length: 100, dtype: category
Categories (2, interval[float64]): [(0.999, 51.5] < (51.5, 98.0]]
'''
应用到分组中:
df.Q1.groupby(pd.qcut(df.Q1,q=2)).count()
'''
Q1
(0.999, 51.5] 50
(51.5, 98.0] 50
Name: Q1, dtype: int64
'''
df.groupby(pd.qcut(df.Q1,q=2)).max()
其他参数:
pd.qcut(range(5), 4)
pd.qcut(range(5), 4, labels=False)
# 指定标签名
pd.qcut(range(5), 3, labels=["good", "medium", "bad"])
# 返回箱子标签 array([ 1. , 51.5, 98. ]))
pd.qcut(df.Q1,q=2, retbins=True)
# 分箱位小数位数
pd.qcut(df.Q1,q=2,precision=3)
# 排名分3个层次
pd.qcut(df.Q1.rank(method='first'),3)
更新时间:2020-12-07 13:50:10 标签:pandas 数据分箱