[Python]初心者筆記7(以pandas熊貓讀取excel資料,data frame操作效果類似LINQ)

[Python]初心者筆記7(以pandas熊貓讀取excel資料,data frame操作效果類似LINQ)

#進行數據分析之前常要引用的函式庫
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

#熊貓是python的excel
import pandas as pd

#檢查工作目錄下有什麼檔案
%ls

#檔案名稱輸入到一半的時候,也可以按下tab鍵,
#jupyter會自動幫你補足需要的檔案名稱文字
#通常read_csv讀出來的資料都叫做data frame
#所以大多都會簡稱為df
df = pd.read_csv("grades.csv")

#看data frame裡面的前5筆資料
df.head()
#如果改成這樣,就是看前3筆資料
df.head(3)

#讀取資料的第一個方法
#像是讀取list一樣的方式:dataframe[索引或欄位名稱]
df["國文"]

#讀取資料的第2個方法
#這個就是dataframe的獨有功能了:dataframe.索引或欄位名稱
#很像是.net裡面的強型別
df.國文

#常見的dataframe資料處理方式是
#先將他放到一個陣列裡面再做後續處理
cg = df.國文.values

#cg直接取算是平均數
cg.mean()

#cg取標準差
cg.std()

#cg取總和
cg.sum()

#data frame也支援畫圖,如果是基本的圖,沒必要轉成array再用numpy去畫
df.國文.plot()

#也有其他種的圖可用:直方圖
df.國文.hist()

#直方圖:加上限定條件,將成績分布分成3個區塊
df.國文.hist(bins=3)

#一口氣取出 count, 算數平均數、標準差、min、Max……
df.describe()

#可自行加上客製化的欄位
#sum(1)是橫向的加總,sum(0)是縱向的加總
df["總級分"] = df[["國文","英文","數學"]].sum(1)

#當然也可以客製化欄位,設定各科的比例
#注意!要新增客製化欄位的話,寫成df.主科 是不行的!
df["主科"] = df.國文 * 1.5 + df.英文 * 1

#data frame也支援類似LINQ的排序sort, 取前幾筆 take(筆數)
#sort有支援的類LINQ語法,似乎也建立在data frame了!
df.sort_values(by="總級分", ascending=False).head(3)

#當然也支援排序多個欄位
df.sort_values(by=["總級分","主科"], ascending=False).head(3)

#以及直接針對某某欄位作條件過濾並取得資料
df[df.主科 > 0]

#也可以在程式碼中直接建立data frame, 訂定自己的欄位名稱, 欄位名稱依序為 col1, col2, col3
mydata = np.random.randn(4,3)
df1 = pd.DataFrame(mydata,columns = list(["col1","col2","col3"]))

#也可以用data frame做groupby 
df = pd.read_csv("http://bit.ly/uforeports")
df_state = df.groupby("State").count()

#要改data frame的某某欄位的話,需使用loc函數(類似call by reference)
df = pd.DataFrame(np.random.randn(5,3),
                 index=list(range(1,6)),
                 columns=list("ABC"))

#data frame限定範圍內重新assign value
df.loc[2:3, "B":"C"] = 0

#data frame指定某個元素重新assign value
df.loc[2, "B"] = 0

#data frame滿足過濾條件下,重新assign 所有欄位的 value
df.loc[df.B>0] = 0

#data frame滿足過濾條件下,重新assign 特定欄位的 value
df.loc[df.B>0, "C"] = 0



參考資料:
成為python數據分析達人的第一課(自學課程)
http://moocs.nccu.edu.tw/course/123/intro