1、學習DataFrame元素獲取,需要掌握以下幾個需求
- 訪問一列 或 多列
- 訪問一行 或 多行
- 訪問某個值
- 訪問某幾行中的某幾列
- 訪問某幾列中的某幾行
2、構造一個DataFrame
df = pd.DataFrame(np.random.randint(70,100,(4,5)), index=["地區1", "地區2", "地區3","地區4"], columns=["武漢","天門", "黃岡","孝感","廣水"]) display(df)
結果如下:
注意:不管是單獨獲取到一行、還是一列,得到的都是一個Series。不管是單獨獲取到多行、還是多列,得到的都是一個DataFrame。
# 獲取一列 x = df["廣水"] display(x) display(type(x)) # 獲取一行 y = df.loc["地區1"] display(y) display(type(y))
結果如下:
3、訪問一列或多列:傳入單個標簽或標簽數組
df = pd.DataFrame(np.random.randint(70,100,(4,5)), index=["地區1", "地區2", "地區3","地區4"], columns=["武漢","天門", "黃岡","孝感","廣水"]) display(df) # 訪問一列 x = df["武漢"] display(x) # 訪問多列 y = df[["武漢","天門"]] display(y)
結果如下:
4、訪問一行或者多行:loc中傳入標簽索引、iloc中傳入位置索引、切片方式、布爾數組方式
① loc標簽索引
df = pd.DataFrame(np.random.randint(70,100,(4,5)), index=["地區1", "地區2", "地區3","地區4"], columns=["武漢","天門", "黃岡","孝感","廣水"]) display(df) x1 = df.loc["地區1"] display(x1) x2 = df.loc[["地區1","地區2"]] display(x2)
結果如下:
特別說明:“訪問行”唯獨不能使用類似df[0],df[[0,1]],df["地區1"],df[["地區1","地區2"]]這樣的方式。
② iloc位置索引
df = pd.DataFrame(np.random.randint(70,100,(4,5)), index=["地區1", "地區2", "地區3","地區4"], columns=["武漢","天門", "黃岡","孝感","廣水"]) display(df) x3 = df.iloc[0] display(x3) x4 = df.iloc[[0,3]] display(x4)
結果如下:
③ 切片方式:這種方式容易忽略,也容易弄錯
df[0:2]
df[1:]
結果如下:
④ 布爾數組方式
df = pd.DataFrame(np.random.randint(70,100,(4,5)), index=["地區1", "地區2", "地區3","地區4"], columns=["武漢","天門", "黃岡","孝感","廣水"]) display(df) y = df[df["武漢"] >= 80] display(y)
結果如下:
5、訪問某個值
如果說要訪問下面數據框DataFrame中的95,應該怎么做呢?
① 先訪問“地區3”這一行,再訪問95這個數據
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) df.loc["地區3"] df.loc["地區3"].loc["黃岡"]
結果如下:
② 先訪問“黃岡”這一列,再訪問95這個數據
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) df["黃岡"] df["黃岡"].loc["地區3"]
結果如下:
③ 向loc中傳入數據的標簽坐標、向iloc中傳入數據的位置坐標(最常用)
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) df.loc["地區3","黃岡"] df.iloc[2,2]
結果如下:
④ 向at中傳入數據的標簽坐標、向iat中傳入數據的位置坐標
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) df.at["地區3","黃岡"] df.iat[2,2]
結果如下:
6、訪問某幾行中的某幾列
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) # 先獲取行,再獲取列 df.loc[["地區1","地區3"]][["武漢","廣水"]]
結果如下:
7、訪問某幾列中的某幾行
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) # 先獲取列,再獲取行 df[["武漢","廣水"]].loc[["地區1","地區3"]]
結果如下:
8、獲取多行多列常用的一種方式:iloc+切片、loc+標簽數組
① 獲取多行多列:iloc+切片
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) x = df.iloc[:3,:] display(x)
結果如下:
② 獲取多行多列:loc+標簽數組
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) x = df.loc[["地區1","地區3"],['武漢','天門','黃岡','孝感','廣水']] display(x)
結果如下:
9、獲取多行多列常用的第二種方式:iloc+切片+位置數組、loc+切片+標簽數組
① 獲取多行多列:iloc+切片+位置數組
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) x = df.iloc[1:,[1,4]] display(x) y = df.iloc[[1,3],1:] display(y)
結果如下:
② 獲取多行多列:loc+切片+標簽數組
df = pd.DataFrame({"武漢":[78,99,81,77], "天門":[74,97,96,97], "黃岡":[77,80,95,84], "孝感":[92,84,75,80], "廣水":[85,85,72,74]}, index=["地區1", "地區2", "地區3","地區4"] ) display(df) x = df.loc["地區1":,["武漢","廣水"]] display(x) y = df.loc[["地區1","地區3"],"天門":] display(y)
結果如下: