在pandas裏面常用用value_counts確認數據出現的頻率。
一、對Series使用
ss = Series.values_count()
注意這裏返回的就是Series
In[2]: import numpy as np
...: import pandas as pd
...: from pandas import DataFrame
...: from pandas import Series
...: ss = Series(['Tokyo', 'Nagoya', 'Nagoya', 'Osaka', 'Tokyo', 'Tokyo'])
...: ss.value_counts() #value_counts 直接用來計算series裏面相同數據出現的頻率
Out[2]:
Tokyo 3
Nagoya 2
Osaka 1
dtype: int64
二、對DataFrame使用
df = DataFrame.apply(pd.value_counts)
這裏使用了apply方法,最後返回賦值給df的也是DataFrame類型
series = DataFrame(colName).value_counts()
這裏對具體列操作,最後返回賦值給series的是Series類型
In[2]: import numpy as np
...: import pandas as pd
...: from pandas import DataFrame
...: from pandas import Series
...: df=DataFrame({'a':['Tokyo','Osaka','Nagoya','Osaka','Tokyo','Tokyo'],'b':['Osaka','Osaka','Osaka','Tokyo','Tokyo','Tokyo']}) #DataFrame用來輸入兩列數據,同時value_counts將每列中相同的數據頻率計算出來
...: print(df)
Backend TkAgg is interactive backend. Turning interactive mode on.
a b
0 Tokyo Osaka
1 Osaka Osaka
2 Nagoya Osaka
3 Osaka Tokyo
4 Tokyo Tokyo
5 Tokyo Tokyo
In[3]: df.apply(pd.value_counts)
Out[3]:
0
Tokyo 3
Nagoya 2
Osaka 1
In[4]: type(df.apply(pd.value_counts))
Out[4]: pandas.core.series.Series
三、要升序排列,可以加參數 ascending=True(默認爲False,即降序)
1、對Series
In[5]: ss.value_counts(ascending=True)
Out[5]:
Osaka 1
Nagoya 2
Tokyo 3
dtype: int64
2、對DataFrame
In[6]: df.apply(pd.value_counts, ascending=True)
Out[6]:
a b
Nagoya 1 NaN
Osaka 2 3.0
Tokyo 3 3.0
Name: a, dtype: int64
四、要歸一化,即計算各個佔比,可以加參數normalize=True(默認爲False)
1、對Series
In[7]: ss.value_counts(ascending=True, normalize=True)
Out[7]:
Osaka 0.166667
Nagoya 0.333333
Tokyo 0.500000
dtype: float64
或者直接對值進行簡單運算也可,可參考《Pandas.Series的加減乘除數學運算》
In[12]: ss.value_counts(ascending=True) / 6
Out[12]:
Osaka 0.166667
Nagoya 0.333333
Tokyo 0.500000
dtype: float64
2、對DataFrame
In[8]: df.apply(pd.value_counts, ascending=True, normalize=True)
Out[8]:
a b
Nagoya 0.166667 NaN
Osaka 0.333333 0.5
Tokyo 0.500000 0.5
五、還有一些其他參數,待續
參考博文:
《value_counts計算DataFrame,Series的數據頻率》
《Python3 pandas (6)計數value_counts()》