在實際的工作場景中,我們經常會遇到這樣一種場景:想要將某些字段進行離散化即分桶,簡單來說就是講年齡分成幾個區間。pandas中的cut方法能很好地完成此操作。
#匯入相關庫,並建立資料集
import pandas as pd
import numpy as np
index = pd.index(data=["tom", "bob", "mary", "james"], name="name")
data =
user_info = pd.dataframe(data=data, index=index)
in [48]:user_info
out[48]:
age city ***
name
tom 15 hangzhou male
bob 28 shanghai female
mary 23 hefei female
james 37 luan male
#將user_info中的age分成三個年齡段
pd.cut(user_info.age,3)
out[51]:
name
tom (14.978, 22.333]
bob (22.333, 29.667]
mary (22.333, 29.667]
james (29.667, 37.0]
name: age, dtype: category
categories (3, interval[float64]): [(14.978, 22.333] < (22.333, 29.667] < (29.667, 37.0]]
從以上得到的結果可以看出,cut將年齡段進行了均等的切分。當然我們還可以進行自定義操作(此時可以對區間名稱起別名):
#自定義區間並進行分割
qujian=[5,15,25,40]
pd.cut(user_info.age,qujian)
out[55]:
name
tom (5, 15]
bob (25, 40]
mary (15, 25]
james (25, 40]
name: age, dtype: category
categories (3, interval[int64]): [(5, 15] < (15, 25] < (25, 40]]
#起別名
pd.cut(user_info.age,qujian,labels=['child','youth','middle'])
out[56]:
name
tom child
bob middle
mary youth
james middle
name: age, dtype: category
categories (3, object): [child < youth < middle]
如果現在想求出每個區間出現male和female出現的次數,該如何操作呢?可以結合groupby函式來進行操作,如下:
#首先對user_info進行切割
pdd=pd.cut(user_info['age'],qujian)
user_info['age'].groupby(pdd).count()
out[66]:
age(5, 15] 1
(15, 25] 1
(25, 40] 2
name: age, dtype: int64
從上可以看出,實現age區間出現次數的統計。 pandas 資料離散化
連續屬性離散化的目的是為了簡化資料結構,資料離散化技術可以用來減少給定連續屬性值的個數。離散化方法經常作為資料探勘的工具。連續屬性的離散化就是將連續屬性的值域上,將值域劃分為若干個離散的區間,最後用不同的符號或整數值代表落在每個子區間中的屬性值。離散化有很多種方法,這使用一種最簡單的方式去操作 這樣...
Pandas資料離散化原理及例項解析
為什麼要程式設計客棧離散化 什麼是資料的離散化 連續屬性的離散化就是在連續屬性的值域上,將值域劃分為若干個zprwgy離散的區間,最後用不同的符號或整數 值代表落在每個子區間中的屬性值 分箱案例 1.先讀取 的資料,篩選出p change資料 data pd.read csv data stock ...
Pandas資料離散化處理
資料離散化處理 import pandas as pd import matplotlib.pyplot as plt from pylab import mpl 設定顯示中文字型 mpl.rcparams font.sans serif simhei data pd.read csv data s...