Python Pandas基礎 (BMI情境)

編輯 : Frank
日期 : 2019/08/12
參考網址


範例情境

處理三年A班幼稚園小朋友的身高、體重資料,需運算BMI訊息並且依序排列,針對於空值請補0。

讀取二維數據 (DataFrame)

透過Pandas來讀取身高體重資料

Pandas資料結構:

  • 一維:Series
  • 二維:DataFrame
  • 三維:Panel

Pandas資料讀取:

  • csv:pd.read_csv()
  • excel:pd.read_excel()
    1
    2
    3
    4
    5
    6
    import pandas as pd

    data = {}
    data['height'] = [165,168,None,172,177]
    data['weight'] = [60,66,62,70,58]
    df = pd.DataFrame(data)

分析數據

運用Pandas判斷身高體重的四分位數、標準差

Pandas計算函數

  • 平均:mean()
  • 標準差:std()
  • 四分位數:quantile(0.25),等於所有數值由小到大排列後的第25%的數字
  • 最小:min()
  • 最大:max()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    print 'name\theight\tweighit'
    print 'std\t%2.2f\t%2.2f'%(df.std()[0],df.std()[1])
    print 'mean\t%2.2f\t%2.2f'%(df.mean()[0],df.mean()[1])
    print 'min\t%2.2f\t%2.2f'%(df.min()[0],df.min()[1])
    print '25%'+'\t%2.2f\t%2.2f'%(df.quantile(0.25)[0],df.quantile(0.25)[1])
    print '50%'+'\t%2.2f\t%2.2f'%(df.quantile(0.5)[0],df.quantile(0.5)[1])
    print '75%'+'\t%2.2f\t%2.2f'%(df.quantile(0.75)[0],df.quantile(0.75)[1])
    print 'max\t%2.2f\t%2.2f'%(df.max()[0],df.max()[1])
    ---------------------------------------------------------------------------
    name height weighit
    std 5.20 4.82
    mean 170.50 63.20
    min 165.00 58.00
    25% 167.25 60.00
    50% 170.00 62.00
    75% 173.25 66.00
    max 177.00 70.00

計算BMI

計算Pandas的身高、體重欄位來獲取BMI數值

1
df['BMI'] = df['weight']/(df['height']*df['height'])*10000

輸出數據

顯示Pandas的身高、體重和BMI數值,並且依據BMI來進行排列

Pandas排序

  • sort_index(): 索引排序
  • sort_values(by = ‘欄位’): 數值排序

Pandas升冪或降密

  • ascending: True為升冪,False為降密

Pandas空值處理

  • fillna(0):空值皆補0來顯示
  • dropna():空值皆刪除

Pandas小數點位數處理

  • round(2): 四捨五入,小數點取自第二位

針對於小數點位數處理的無條件捨去與進位,可使用Numpy來協助處理
Ex: print df[‘BMI’].apply(np.floor)

1
2
3
4
5
6
7
8
print df.sort_values(by = 'BMI',ascending = False).round(2).fillna(0)
---------------------------------------------------------------------------
height weight BMI
3 172.0 70 23.66
1 168.0 66 23.38
0 165.0 60 22.04
4 177.0 58 18.51
2 0.0 62 0.00