創建DataFrame數據
用Pandas套件進行數據處理,首先要導入Pandas套件。
import pandas as pd
創建DataFrame的語法爲:
數據變量 = pd.DataFrame(數據類型)
“數據類型”可以是多種形式:第一種形式是以相同數量的列表數據作爲鍵值的字典型數據。例如,簡歷一個包含4位學生、每人有5科成績的DataFrame,數據變量名稱爲df:
df = pd.DataFrame({"林大明":[65,92,78,83,70], "陳聰明":[90,72,76,93,56], "黃美麗":[81,85,91,89,77],\
"熊小娟":[79,53,47,94,80]})
所創建的DataFrame如下圖:以字典的“鍵”作爲列標題(注意其順序是隨機的),以自動生成的數值作爲行標題。
“數據類型”的第二種形式是可以自行設置行標題及列標題的形式:
數據變量 = pd.DataFrame(數據[, columns=列標題列表, index=行標題列表])
例如,建立一個由4位學生、每人有5科成績的DataFrame,數據變量名稱爲df,列標題爲科目名稱,行標題爲學生姓名:
datas = [[65,92,78,83,70],[90,72,76,93,56],[81,85,91,89,77],[79,53,47,94,80]]
indexs = ["林大明", "陳聰明", "黃美麗", "熊小娟"]
columns = ["語文", "數學", "英文", "自然", "社會"]
df = pd.DataFrame(datas, columns=columns, index=indexs)
"columns=列標題列表"及"index=行標題列表"這兩個參數是可以省略的,系統會自動加入數值作爲標題。
這種方式會按用戶輸入數據的順序來生成DataFrame,且具有行列標題。如無特殊需求,大部分用戶會以這種方式生成DataFrame。
修改行、列標題
如果創建DataFrame時沒有設置行、列標題,或者程序執行過程中需要修改行、列標題,例如上面例子中要更改學生姓名,那麼可以通過修改行、列標題的命令來進行修改。修改列標題的語法爲:
df.columns = 列標題列表
修改行標題的語法爲:
df.index = 行標題列表
現在我們就把上面案例中第一個學生的姓名改爲“林晶輝”,把第4個科目的名稱改爲“理化”:
import pandas as pd
datas = [[65,92,78,83,70],[90,72,76,93,56],[81,85,91,89,77],[79,53,47,94,80]]
indexs = ["林大明", "陳聰明", "黃美麗", "熊小娟"]
columns = ["語文", "數學", "英文", "自然", "社會"]
df = pd.DataFrame(datas, columns=columns, index=indexs)
indexs[0] = "林晶輝"
df.index = indexs
columns[3] = "理化"
df.columns = columns
print(df)
獲取DataFrame數據
獲取列數據
獲取一個列數據的語法爲:
df[列標題]
例如,讀取所有學生自然科目的成績:
df["自然"]
執行結果:
若要獲取兩個以上列數據,則需要兩個中括號把列標題括起來,語法爲:
df[[列標題1, 列標題2, ......]]
例如,獲取所有學生的語文、數學及自然成績:
df[["語文", "數學", "自然"]]
我們還可以通過對列數據進行邏輯運算來獲取數據,例如獲取數學成績80分以上(含)的所有學生成績:
df[df.數學 >= 80]
執行結果:
用df.values獲取數據
df.values可獲取全部數據,返回結果是一個二維列表,執行結果爲:
獲取第2位學生陳聰明成績的語法爲:
df.values[1]
執行結果:
讀取第2位學生陳聰明的英文成績(第3個科目)的語法爲:
df.values[1][2]
執行結果:
df.loc通過行、列標題獲取數據
用df.values獲取數據的前提是必須知道學生及科目在表中的位置,非常麻煩。而df.loc可直接通過行、列標題讀取數據,使用起來更爲方便。
df.loc[行標題, 列標題]
行標題或列標題若包含多個項目,則用小括號將項目括起來,項目之間以逗號分隔,如"(“數學”, “自然”)";若要包含所有項目,則用冒號":"表示。
例如讀取學生陳聰明的所有成績:
df.loc["陳聰明", :]
執行結果:
讀取學生陳聰明的數學科目成績:
df.loc["陳聰明"]["數學"]
執行結果:
讀取學生陳聰明、熊小娟的所有成績:
df.loc[("陳聰明", "熊小娟"), :]
讀取學生陳聰明、熊小娟的數學、自然科目成績:
df.loc[("陳聰明", "熊小娟"), ("數學", "自然")]
讀取學生陳聰明到熊小娟的數學科目到社會科目的成績:
df.loc["陳聰明":"熊小娟", "數學":"社會"]
執行結果:
讀取從頭到黃美麗的學生,及其從數學科目到社會科目的成績:
df.loc[:"黃美麗", "數學":"社會"]
執行結果:
讀取陳聰明到最後的學生,他們的數學科目到社會科目的成績:
df.loc["陳聰明":, "數學":"社會"]
執行結果:
用df.iloc通過行、列位置讀取數據
df.iloc是以行、列位置讀取數據的,語法爲:
df.iloc(行位置, 列位置)
df.iloc的用法與df.loc完全相同,只需要把“標題”改爲“位置”即可。例如,讀取陳聰明(第2位學生)的所有成績:
df.iloc[1, :]
讀取學生陳聰明的數學(第2個科目)成績:
df.iloc[1][1]
用di.ix通過行、列標題或行、列位置讀取數據
df.ix是df.loc及df.iloc的合體,使用df.ix,通過行、列標題或行、列位置,都可以讀取數據,語法爲:
df.ix(行標題或行位置, 列標題或列位置)
df.ix的用法與df.loc完全相同。例如,讀取陳聰明(第2位學生)的數學(第2個科目)成績,通過下列4種語法都可以實現:
df.ix["陳聰明"]["數學"]
df.ix["陳聰明"][1]
df.ix[1]["數學"]
df.ix[1][1]
由於df.ix可取代df.loc及df.iloc,實際開發中,只使用df.ix就足夠了。
獲取最前面或最後面的幾行數據
如果要獲取最前面或最後面的幾行數據,可使用head()方法,語法爲:
df.head(n)
參數n可有可無,表示讀取最前面n行數據,若省略則默認讀取前5行數據。例如,讀取最前面2個學生成績(林大明及陳聰明):
df.head(2)
若要讀取最後面幾行數據,則使用tail()方法,語法爲:
df.tail(n)
使用方法與head()相同。例如讀取最後面兩個學生成績(黃美麗及熊小娟):
df.tail(2)