我们对 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