1. 程式人生 > >pandas 6 - 索引切片選擇( tcy)

pandas 6 - 索引切片選擇( tcy)

索引切片選擇      2018/12/3  2018/12/14  

1.Series選擇:

操作 句法 例項 結果 說明
 -  -  -  - s=pd.Series([0,1,2,3,4],index=list('abcde'))
標籤s/s.loc s[單個標籤] s['c'] , s.loc['c']
2 如未包含標籤則引發異常
標籤s/s.loc s[標籤切片] s['c':'e']=6 2,3,4 標籤切片包含末端‘e’;
標籤s/s.loc s[標籤列表] s[['c','d','e']] 2,3,4 標籤不存在拋異常。錯誤用法s[('c','d','e')]
切片s/s.iloc s[n-1] s[2],s.iloc[2] 2  -
切片s/s.iloc
s[切片] s[2:] 2,3,4 選擇第3,4,5行資料
切片s/s.iloc  - s[:3] , s[-3:]  - 選擇前,後3個數據
bool-s/s.iloc s[布林向量] s[s>1] , s.loc[s>1] 2,3,4 選擇s>1的資料2,3,4個數據(第3,4,5行)
屬性訪問 s.a s.c 2  -
get-函式 s.get(label) s.get('c') 2 缺少標籤返回None或指定預設值

 

2.資料幀DataFrame選擇:-彙總表

 

No

函式 df[] df.loc[] df.iloc[] df.at[] df.iat[]
1 用途 選擇行或列 選擇行列 選擇行列 標量 標量
2 索引數值 行索引int或str; 索引是行名,列名 索引是數值 索引是行名,列名 索引是數值
    列索引是行,列名  -  -  -  -
3 選擇標量  - df.loc['b','C']  df.iloc[1,2] df.at['b','C'] df.iat[1,2]
  選擇標量  -  -  - df.loc['b'].iat[2] df.iloc[1].at['C']
4 選擇行 df[0:1]或df['a':'a']  df.loc['b'] df.iloc[1]  -  -
  選擇行 df[0:3]或df['a':'c']   df.loc[['b','c']] df.iloc[[1,3]]  -  -
  選擇行   df.loc['a':'c'] df.iloc[1:4]  -  -
5 選擇列 df['A']或df.A  df.loc[:,'B'] df.iloc[:,1]  -  -
  選擇列 df[['A','C']]    df.loc[:,['B','C']] df.iloc[:,[1,2]]  -  -
  選擇列  - df.loc[:,'A':'C'] df.iloc[:,0:3]  -  -
6 選擇行列  - df.loc['a':'c','A':'C'] df.iloc[0:3,0:3]  -  -
  選擇行列  - df.loc['a':'c',['A','C']] df.iloc[0:3,[0,2]]  -  -
  選擇行列  - df.loc[['a','c'],'A':'C'] df.iloc[[0,2],0:3]  -  -
  選擇行列  - df.loc['a','A':'C'] df.iloc[0,0:3]  -  -
7 布林索引 df[b1],df[df.A>0]   行 df.loc[b1,b2] df.iloc[b1,b2]  -  -
    df[df['B'].isin([6,7])]行 b1=np.array([0,1,0,1,0],dtype=bool) b2=np.array([1,0,1,0],dtype=bool)
  注意:          
  df=pd.DataFrame(np.arange(20).reshape((5,4),order='F'),index=list('abcde'),columns=list('ABCD'))
  返回值:數值,系列,資料幀;當標籤列表返回系列時,若想返回資料幀外加一層中括號。
  df[0]或df['a']錯誤用法;當有分號不能外加中括號;都可以檢視設定資料。

 

 2.2.例項:

 

df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
index=[4, 5, 6], columns=['A', 'B', 'C'])
# 例項1:
df.loc[5].at['B'] # 獲取標量值: 4
df.loc[5].iat[1]  # 獲取標量值:4
df.iloc[1,1]      # 4
df.iat[1,1]=4     # 4

# 例項2:
df.loc[dates[0]] # 按標籤選擇:獲取第一行
df.iloc[2]       # 通過傳遞的整數的位置

df.loc[:,['A','B']]          # 按標籤選擇:獲取第A,B列
df.loc['20181015',['A','B']] # 按標籤選擇-減少返回物件的尺寸

df.iloc[3:5,0:2]       # 通過整數切片
df.iloc[[1,2,4],[0,2]] # 通過整數位置位置列表

# 例項3:使用isin()過濾方法
df2 = df.copy()
df2['D'] = ['one','two','three']
df2[df2['D'].isin(['two','three'])]
'''
   A  B  C  D
5  0  4  1  two
6 10 20 30  three'''

# 例項4:布林索引-使用單個列的值來選擇資料。
df[df.B >=4 ]
#   A   B  C
# 5 0   4  1
# 6 10 20 30

df.loc[[False, False, True]]#選取第3行
df.loc[df['B'] >4, ['C']]   #一個值返回為資料幀

# 例項5:select_dtypes() 選擇顯示特定資料型別
# 要選擇所有數字和布林列,同時排除無符號整數:
df.select_dtypes(include=['number', 'bool'], exclude=['unsignedinteger'])

# 例項6:按可呼叫選擇
# .loc,.iloc以及[]索引也可以接受一個callable索引器。

df.loc[lambda df: df.A > 0, :]    #獲取第三行資料
df.loc[:, lambda df: ['A', 'B']]  #獲取A,B列資料
df.iloc[:, lambda df: [0, 1]] #獲取A,B列資料
df[lambda df: df.columns[0]]  #獲取A列資料


df.A.loc[lambda s: s > 0] #獲取序列=10

# 例項7:IX 已棄用
df.loc[df.index[[0, 2]], 'A']           # 獲取第1,2行第A列資料
df.iloc[[0, 2],df.columns.get_loc('A')] # 獲取第1,2行第A列資料
df.iloc[[0, 2],df.columns.get_indexer(['A','B'])] # 獲取第1,2行第A,B列資料


# 例項8:設定資料
df[['B', 'A']] = df[['A', 'B']]       #就地修改
df.loc[:,['B', 'A']] = df[['A', 'B']] #不會修改
# 交換列值的正確方法是使用原始值:
df.loc[:,['B', 'A']] = df[['A', 'B']].values