【Python3 爬蟲學習筆記】Pandas:強大的數據處理套件 1

創建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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章