當前位置:成語大全網 - 新華字典 - pandas索引取數

pandas索引取數

註:《利用python進行數據分析》的學習筆記-pandas

import pandas as pd

import numpy as np

壹維數組,包含壹個數組對象,壹個索引對象,索引對象默認為0開始的遞增數字,可通過index=[idx1, idx2, ...]參數指定

可通過索引選取/修改相應的數據,選取:data=series[idx], 修改:series[[idxm, idxn, ...]]=[dm, dn, ...]

series可看成定長有序字典,索引到數據的映射,series可用於字典參數的函數中。idxn in series返回True/False

多個series做算術操作,會自動對齊不同索引的數據,無此數據自動填充NaN

可看作多個series組成的表單,dataframe有兩種索引,與series相同的index行索引,還有columns列索引

選取/修改壹行數據dataframe.loc['index']

選取/修改壹列數據dataframe['column'], dataframe.column

obj.reindex(newIndex) #適用於series與dataframe

obj.reindex(index=newIndex, columns=newcolumns) #dataframe需對行索引列索引都重新索引時

obj.reindex(index=newindex, columns=newcolumns, fill_value=100) #指定填充值,不指定時填充NaN

obj.reindex(index=newindex, columns=newcolumns, fill_value=100, method='ffill') ? #指定填充方法ffill/pad(前向填充),bfill/backfill(後向填充)

obj=obj.drop(index, axis=0)

obj=obj.drop([col1, col2, ...], axis=1)

axis默認為0,刪除列數據時指定axis為1

series

obj = pd.Series(range(5), index=list('abcde'))

取單數obj[2], ? obj['c']

切片取數 obj[2:5],obj['a':'c']

不連續取數obj[1,3],obj['a','c','d']

過濾 obj[obj>2],

修改 obj[3]=0,

註:series切片不用於python數據結構的切片,series的切片包含末端,即python:[start, end), series:[start, end]

dataframe

obj = pd.DataFrame(np.arange(15).reshape((3,5)),

index = ['one', 'two', 'three'],

columns = list('abcde') )

取單列 ?obj.loc[:, 'c'], ?obj.iloc[:, 2], obj.xs('c', axis=1), obj['c'],?

取單行 ?obj.loc['one'], obj.iloc[1],obj.xs('one', axis=0),?

取連續行 ?obj.loc['one':'three'], ? obj.iloc[1:3], obj[:2],?

取連續列 ?obj.loc[:, 'b':'d'], ?obj.iloc[:, 2:4],

取不連續行 ?obj.loc[['one','three']] ?obj.iloc[[0,2]],

取不連續列 ?obj.loc[:, ['b', 'e']] obj.iloc[:, [1,4]],

取單行單列 ?obj.loc['two', 'd'] ?obj.iloc[2, 4]

取連續行列 ?obj.loc['one':'three', 'b':'d'] ? obj.iloc[:2, 2:4]

取不連續行列? obj.loc[['one','three'], ['b':'d']] ?obj.iloc[[0,2], [1,4]]

根據列值過濾行 ? obj.loc[obj['c']%2==0, :] ?

******此處吐個槽,這個切片方法壹會兒只能取單列,壹會兒只能取連續行,壹會兒包含終止項,壹會兒不包含,我人都傻了...

******loc/iloc方法接收兩個參數,第壹個是行,第二個是列,都可切片,也都可指定索引,列參數可以不寫,默認取所有列數據

******下面總結下這個花哨的切片!

dataframe有兩種索引,行索引/列索引。每種索引包含兩類用法,索引名稱(對應df.loc)/索引下標對應(df.iloc)

① df[columnName] ?取單列數據,只能用列名,不能使用列下標,不能用於取單行

② df[lineName1: lineName2] ? 取連續行數據,使用行名時,包含末尾項,即[start,end]

③ df[lineIndex1: lineIndex2] 取連續行數據,使用行下標時,不包含末尾項?,即[start,end)

④ df.loc['line2':'line4']?取連續行數據,使用行名時,包含末尾項,即[start,end]?

⑤ df.iloc[2:4]取連續行數據,使用行下標時,不包含末尾項?,即[start,end)?

⑥df.loc[:,?columnName1:columnName2] ? 取連續列,使用列名時,包含末尾項,即[start,end]

⑦ df.iloc[:, columnIndex1:columnIndex2] 取連續列,使用列下標時,不包含末尾項,即[start,end)

⑧ df.loc[[lineName1, ...], [columnName1, ...]] 使用行名/列名取不連續行列

⑨ df.iloc[[lineIndex1, ...], [columnIndex1, ...]] ?使用行下標/列下標取不連續行列

以前用的時候總覺得奇奇怪怪的,花了壹下午時間壹個壹個嘗試終於捋順了,歐耶! (〃 ̄︶ ̄) 人 ( ̄︶ ̄〃)

DataFrame直接切片,即df[args],可用於指定列名取單列數據,可用於指定行名/行下標取連續多行數據

取單行數據不可直接切片,需使用loc/iloc方法

DataFrame.loc(line, column) 用於按索引名稱取行/列數據,此時,首尾項都會被取出

?參數line指定行索引名稱,參數2指定列索引名稱(可省略,默認選取所有列)。

DataFrame.iloc(line, column) 用於按索引下標取行/列數據,此時,尾項數據不會被取出

? 參數line指定行索引下標,參數2指定列索引下標(可省略,默認選取所有列)。