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

 

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/84730151