pandas學習筆記之Dataframe索引
阿新 • • 發佈:2019-01-04
# DataFra是一個表格, 有行索引和列索引,可以被看做由Series組成的字典(共用一個索引) import numpy as np import pandas as pd df = pd.DataFrame(np.random.rand(12).reshape(3,4) * 100, index = ["one","two","three"], columns = list("abcd")) print(df) print("-----------------") # 選擇列 data1 = df["a"] # 預設選擇行 print(data1) print() data2 = df[["a", "d"]] print(data2) print() # []中寫列名,所以一般資料columns都會單獨制定,不會用預設數字列名,以免和index衝突 data3 = df.loc["one"] print(data3) print(type(data3)) # 單選為Series print() data4 = df.loc[["one","three"]] print(data4) print(type(data4)) # 多選為Dataframe data5 = df[:1] print(data5) print(type(data5)) print() # print(df[0]) # KeyError: 0 # 總結:df[]中為數字的時候,預設選擇行,並且只能進行切片,不能單獨選擇(df[0]會報錯), # 另外的,即使只選擇一行,其結果格式仍然為Dataframe格式,這裡需要注意一下,使用loc[index]取一行為Series格式 # 核心筆記:df[col]一般用於選擇列,[]中寫列名
df.loc[] 按index選擇行(列索引)
df = pd.DataFrame(np.random.rand(16).reshape(4,4) * 100, index = ["one","two","three", "four"], columns = list("abcd")) print(df) print() print(df["a"]) print(df["a"]["one"]) print(df["a"][0]) # print(df.loc[0]) # 報錯 print() # print(df.loc["one"]) print(df.loc[["one","three"]]) print() print(df.loc["one":"three"]) # 針對index做切片索引,這裡是末端包含的
df.iloc[] - 按照整數位置(從軸的0到length-1)選擇行(行索引)
類似list的索引,其順序就是dataframe的整數位置,從0開始計
df = pd.DataFrame(np.random.rand(16).reshape(4,4) * 100, index = ["one","two","three", "four"], columns = list("abcd")) print(df) print(df.iloc[0]) print(df.iloc[[0,1,2]]) # 多行索引,位置可以變 print(df.iloc[[2,0,1]]) # print(df.iloc[4]) # 這裡報錯 # 和loc索引不同,不能索引超出資料行數的整數位置 print() print(df.iloc[1:3]) # 切片索引,末端不包含(針對整數位置索引)
Dataframe 的 布林索引
df = pd.DataFrame(np.random.rand(16).reshape(4,4) * 100, index = ["one","two","three", "four"], columns = list("abcd"))
print(df)
print("----------------------")
b1 = df < 20
print(b1, type(b1))
print(df[b1])
print()
# 不做索引則會對資料每個值進行判斷
# 索引結果保留 所有資料:True返回原資料, False返回值為NaN
print(df[df[["a"]]>50])
# 單列做判斷
# 索引結果保留所有資料,True返回元資料,False返回值為NaN
print()
print(df[df[["a","b"]]>50])
print()
print(df[df.loc[["one","three"]]>50])
# 多行做判斷(根據index)
# 索引結果保留所有資料,True返回元資料,False返回值為NaN
print()
print(df[df.iloc[[1,3]]>50])
多重索引:比如同時索引 行和列
先選擇列,再選擇行----相當於對於一個數據,先篩選欄位,再選擇資料
df = pd.DataFrame(np.random.rand(16).reshape(4,4) * 100, index = ["one","two","three", "four"], columns = list("abcd"))
print(df)
print("----------------------")
print(df["a"].loc[["one","four"]]) # Series格式
print()
print(df[["a","d"]].loc[["one","four"]]) # dataframe格式
print()
print(df[df>50].iloc[::2])
print()
# print(df[["a","b","y"]]) # KeyError: "['y'] not in index"
# print(df.loc[["p"]]) 這裡都會報錯,因為此時陣列已經建立完成
對於多重索引,讀者可以嘗試更多的索引方式,這裡不再贅述