數據分析
使用pd讀取,再使用np處理,np.min(數據,axis=)
其中min,max,median;最小,最大,中位數;aixs=0表示每列運算
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv.csv',header=0,\
encoding='gbk',dtype={'年齡':float})
sele_att=["年齡","身高"]
print('求最小值----')
print(np.min(df[sele_att],axis=0))
print('求最大值----')
print(np.max(df[sele_att],axis=0))
print('求最中位值----')
print(np.median(df[sele_att],axis=0))
'''
求最小值----
年齡 4.0
身高 160.0
dtype: float64
求最大值----
年齡 35.0
身高 180.0
dtype: float64
求最中位值----
[ 13. 175.]
'''
使用pandas自身函數處理,使用: df[列名列表].min(axis=)
axis的作用同np中相同,最大值max(),中位數median(),累加值cumsum(),總和sum(),分位數quantile(),describe()無參時,是對列數值型數據的描述,當describe(include=[“object”])時,統計所有對象
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv.csv',header=0,\
encoding='gbk',dtype={'年齡':float})
sele_att=["年齡","身高"]
print('求最小值----')
print(df[sele_att].min(axis=0))
print('求最大值----')
print(df[sele_att].max(axis=0))
print('求最中位值----')
print(df[sele_att].median(axis=0))
print('求每列累加值----')
print(df[sele_att].cumsum(axis=0))
print('求每列加和值----')
print(df[sele_att].sum(axis=0))
print('求每列分位數值----')
print(df[sele_att].quantile([0,0.2,0.5,1.0],axis=0))
print('對數值列的計算描述----')
print(df[sele_att].describe())
print('對所有列的對象描述----')
print(df.describe(include=['object']))
'''
求最小值----
年齡 4.0
身高 160.0
dtype: float64
求最大值----
年齡 35.0
身高 180.0
dtype: float64
求最中位值----
年齡 13.0
身高 175.0
dtype: float64
求每列累加值----
年齡 身高
0 20.0 180.0
1 55.0 350.0
2 78.0 510.0
3 83.0 685.0
4 89.0 865.0
5 93.0 1040.0
求每列加和值----
年齡 93.0
身高 1040.0
dtype: float64
求每列分位數值----
年齡 身高
0.0 4.0 160.0
0.2 5.0 170.0
0.5 13.0 175.0
1.0 35.0 180.0
對數值列的計算描述----
年齡 身高
count 6.000000 6.000000
mean 15.500000 173.333333
std 12.565827 7.527727
min 4.000000 160.000000
25% 5.250000 171.250000
50% 13.000000 175.000000
75% 22.250000 178.750000
max 35.000000 180.000000
對所有列的對象描述----
姓名 性別 地址
count 6 6 6
unique 6 2 6
top 小紅 男 芬蘭
freq 1 4 1
'''
分類彙總
首先,使用my_group=pd.groupby(by=依據的屬性名列表)返回一個組對象,再對組對象處理my_group.mean() 等函數處理
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv.csv',header=0,\
encoding='gbk',dtype={'年齡':float})
groupde=df.groupby(by='身高')
print(groupde.mean())
print('--分割=='*3)
print(groupde.max())
print('--計數分割=='*3)
print(groupde.count())
print('--數據量分割=='*4)
print(groupde.size())
'''
年齡
身高
160 23.0
170 35.0
175 4.5
180 13.0
--分割==--分割==--分割==--分割==
姓名 年齡 性別 地址
身高
160 黑蛋 23.0 女 日本
170 狗子 35.0 男 加拿大
175 小紅 5.0 男 韓國
180 王貴 20.0 男 美國
--分割==--分割==--分割==--分割==
姓名 年齡 性別 地址
身高
160 1 1 1 1
170 1 1 1 1
175 2 2 2 2
180 2 2 2 2
--分割==--分割==--分割==--分割==
身高
160 1
170 1
175 2
180 2
dtype: int64
'''
聚合函數agg(),針對相同索引的統計mean,sum,max等以及自己定義的函數
給每一列的屬性同樣的統計運算
建立好分組後(groupby())的變量設爲grouped,使用**groupe.agg([np.mean,np.sum])**將組的數據可進行mean、sum等運算,數據列下會出現新的agg()的列屬性。如下圖所示,因爲求平均與和只能用於數值型數據,除了數字的年齡(成爲索引),另外就是
df=pd.read_csv('my_csv.csv',header=0,encoding='gbk',dtype={'年齡':float})
print(df)
'''
姓名 年齡 性別 地址 身高
0 王貴 20.0 男 美國 180
1 狗子 35.0 男 加拿大 170
2 黑蛋 23.0 女 日本 160
3 小五 5.0 男 韓國 175
4 李四 4.0 男 朝鮮 180
5 小紅 4.0 女 芬蘭 175
'''
# names 表示多個列的屬性名稱
names=["姓名","年齡","身高","地址"]
# df[names]產生一個以“年齡”作爲索引的包含names中幾個屬性列
grouped= df[names].groupby('年齡')
#索引不變,求出幾個屬性列的平均值與和
print(grouped.agg([np.mean,np.sum]))
'''
身高
mean sum
年齡
4.0 177.5 355
5.0 175.0 175
20.0 180.0 180
23.0 160.0 160
35.0 170.0 170
'''
#對篩選後的數據進行loc,這個loc是對列的分層
print(grouped.agg([np.mean,np.sum]).loc[[4,5],('身高',['mean','sum'])])
'''
身高
mean sum
年齡
4.0 177.5 355
5.0 175.0 175
'''
給每一列的屬性不同的統計運算(字典)
在agg()中使用字典作爲參數可以對不同列進行最小、最大、平均的不同的計算,下面就對年齡的最大、最小,對體重的最大,身高的平均
import pandas as pd
import numpy as np
df=pd.read_csv('my_csv.csv',header=0,\
encoding='gbk',dtype={'年齡':float})
print(df)
names=["id","姓名","年齡","身高","體重"]
grouped= df[names].groupby('id')
print(grouped.agg({'年齡':(np.max,np.min),'體重':np.max,\
'身高':np.mean}))
自己定義的函數
自己定義函數doub_out(),作用:將一組數據累加後再乘以2
import pandas as pd
import numpy as np
def doub_out(data): #自己建立的運算函數
return(data.sum()*2)
df=pd.read_csv('my_csv.csv',header=0,\
encoding='gbk',dtype={'年齡':float})
print(df)
names=["id","姓名","年齡","身高","體重"]
grouped= df[names].groupby('id')
print(grouped.agg({'年齡':(np.max,doub_out),'體重':np.max, '身高':np.mean}))