我们对 dataframe 进行选择,大抵从这三个层次考虑:行列、区域、单元格。
其对应使用的方法如下:
一. 行,列 --> df[]
二. 区域 --> df.loc[], df.iloc[], df.ix[]
三. 单元格 --> df.at[], df.iat[]
下面开始练习:
1
2
3
4
|
import numpy as np import pandas as pd df = pd.dataframe(np.random.randn( 6 , 4 ), index = list ( 'abcdef' ), columns = list ( 'abcd' )) |
1. df[]:
一维
行维度:
整数切片、标签切片、<布尔数组>
列维度:
标签索引、标签列表、callable
1
2
3
4
5
6
|
df[: 3 ] df[ 'a' : 'c' ] df[[true,true,true,false,false,false]] # 前三行(布尔数组长度等于行数) df[df[ 'a' ]> 0 ] # a列值大于0的行 df[(df[ 'a' ]> 0 ) | (df[ 'b' ]> 0 )] # a列值大于0,或者b列大于0的行 df[(df[ 'a' ]> 0 ) & (df[ 'c' ]> 0 )] # a列值大于0,并且c列大于0的行 |
1
2
3
|
df[ 'a' ] df[[ 'a' , 'b' ]] df[ lambda df: df.columns[ 0 ]] # callable |
2. df.loc[]
二维,先行后列
行维度:
标签索引、标签切片、标签列表、<布尔数组>、callable
列维度:
标签索引、标签切片、标签列表、<布尔数组>、callable
1
2
3
4
5
6
7
8
|
df.loc[ 'a' , :] df.loc[ 'a' : 'd' , :] df.loc[[ 'a' , 'b' , 'c' ], :] df.loc[[true,true,true,false,false,false], :] # 前三行(布尔数组长度等于行数) df.loc[df[ 'a' ]> 0 , :] df.loc[df.loc[:, 'a' ]> 0 , :] df.loc[df.iloc[:, 0 ]> 0 , :] df.loc[ lambda _df: _df.a > 0 , :] |
1
2
3
4
5
6
7
|
df.loc[:, 'a' ] df.loc[:, 'a' : 'c' ] df.loc[:, [ 'a' , 'b' , 'c' ]] df.loc[:, [true,true,true,false]] # 前三列(布尔数组长度等于行数) df.loc[:, df.loc[ 'a' ]> 0 ] # a行大于0的列 df.loc[:, df.iloc[ 0 ]> 0 ] # 0行大于0的列 df.loc[:, lambda _df: [ 'a' , 'b' ]] |
1
|
df.a.loc[ lambda s: s > 0 ] |
3. df.iloc[]
二维,先行后列
行维度:
整数索引、整数切片、整数列表、<布尔数组>
列维度:
整数索引、整数切片、整数列表、<布尔数组>、callable
1
2
3
4
5
6
7
8
|
df.iloc[ 3 , :] df.iloc[: 3 , :] df.iloc[[ 0 , 2 , 4 ], :] df.iloc[[true,true,true,false,false,false], :] # 前三行(布尔数组长度等于行数) df.iloc[df[ 'a' ]> 0 , :] #× 为什么不行呢?想不通! df.iloc[df.loc[:, 'a' ]> 0 , :] #× df.iloc[df.iloc[:, 0 ]> 0 , :] #× df.iloc[ lambda _df: [ 0 , 1 ], :] |
1
2
3
4
5
6
7
|
df.iloc[:, 1 ] df.iloc[:, 0 : 3 ] df.iloc[:, [ 0 , 1 , 2 ]] df.iloc[:, [true,true,true,false]] # 前三列(布尔数组长度等于行数) df.iloc[:, df.loc[ 'a' ]> 0 ] #× df.iloc[:, df.iloc[ 0 ]> 0 ] #× df.iloc[:, lambda _df: [ 0 , 1 ]] |
4. df.ix[]
二维,先行后列
行维度:
整数索引、整数切片、整数列表、
标签索引、标签切片、标签列表、
<布尔数组>、
callable
列维度:
整数索引、整数切片、整数列表、
标签索引、标签切片、标签列表、
<布尔数组>、
callable
1
2
3
4
5
6
7
|
df.ix[ 0 , :] df.ix[ 0 : 3 , :] df.ix[[ 0 , 1 , 2 ], :] df.ix[ 'a' , :] df.ix[ 'a' : 'd' , :] df.ix[[ 'a' , 'b' , 'c' ], :] |
1
2
3
4
5
6
7
|
df.ix[:, 0 ] df.ix[:, 0 : 3 ] df.ix[:, [ 0 , 1 , 2 ]] df.ix[:, 'a' ] df.ix[:, 'a' : 'c' ] df.ix[:, [ 'a' , 'b' , 'c' ]] |
5. df.at[]
精确定位单元格
行维度:
标签索引
列维度:
标签索引
1
|
df.at[ 'a' , 'a' ] |
6. df.iat[]
精确定位单元格
行维度:
整数索引
列维度:
整数索引
1
|
df.iat[ 0 , 0 ] |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/hhh5460/p/5595616.html