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指定列索引下標(可省略,默認選取所有列)。