在《利用python進行資料分析》這本書的第七章介紹了pandas的qcut函式的用法。原書介紹qcut函式是乙個與分箱密切相關的函式,它基於樣本分位數進行分箱,可以通過qcut獲得等長的箱:
data = np.random.randn(1000)#data服從正態分佈
cats = pd.qcut(data, 4)#將data均勻分成四份
cats
out: [(0.657, 3.349], (-0.722, -0.0358], (-3.016, -0.722], (-3.016, -0.722], (-3.016, -0.722], ..., (-0.722, -0.0358], (-0.722, -0.0358], (-0.722, -0.0358], (-0.0358, 0.657], (-0.0358, 0.657]]
length: 1000
categories (4, interval[float64]): [(-3.016, -0.722] < (-0.722, -0.0358] < (-0.0358, 0.657] < (0.657, 3.349]]
pd.value_counts(cats)#使用qcut獲得了等長的箱
out: (0.657, 3.349] 250
(-0.0358, 0.657] 250
(-0.722, -0.0358] 250
(-3.016, -0.722] 250
dtype: int64
data裡面的元素服從正態分佈,長度為1000,qcut將data按照每250的資料量將data分箱,分出4個等長的箱
我們也可以傳入自定義的分位數(0和1之間的資料)
pd.qcut(data, [0, 0.1, 0.5, 0.9, 1.])
out: [(1.258, 3.349], (-1.392, -0.0358], (-1.392, -0.0358], (-1.392, -0.0358], (-1.392, -0.0358], ..., (-1.392, -0.0358], (-1.392, -0.0358], (-1.392, -0.0358], (-0.0358, 1.258], (-0.0358, 1.258]]
length: 1000
categories (4, interval[float64]): [(-3.016, -1.392] < (-1.392, -0.0358] < (-0.0358, 1.258] < (1.258, 3.349]]
catss = pd.qcut(data, [0, 0.1, 0.5, 0.9, 1.])
pd.value_counts(catss)
out: (-0.0358, 1.258] 400
(-1.392, -0.0358] 400
(1.258, 3.349] 100
(-3.016, -1.392] 100
dtype: int64
當我對qcut函式傳入了[0, 0.1, 0.5, 0.9, 1.]自定義分位數,它的原理是將(0, 0.1]的區間長度作為頻率,求得第乙個箱的資料量的大小,即1000*0.1 = 100,所以分箱結果的第乙個區間(-3.016, -1.392]的數量為100,依次類推將1000個資料分成四個區間
另外qcut函式的第乙個區間的左側是樣本中最小值,最後乙個區間的右側是樣本資料的最大值,由此根據分位數來進行分箱的
Python中的Pandas模組
目錄 pandas series 序列的建立 序列的讀取 dataframe dataframe的建立 dataframe資料的讀取 panel panel的建立 pandas python data analysis library 是基於numpy 的一種工具,該工具是為了解決資料分析任務而建立...
python中pandas的幾種合併
import pandas as pd import numpy as np 1 上下合併 df1 pd.dataframe np.ones 2,4 0,columns a b c d df2 pd.dataframe np.ones 2,4 1,columns a b c d 兩行四列,每一列分別...
python中pandas常用方法
coding utf 8 import numpy as np import pandas as pd datas pd.date range 20140729 periods 6 先建立乙個時間索引,所謂的索引 index 就是每一行資料的id,可以標識每一行的唯一值 print datas da...