真实序号索引与标签索引的使用

DataFrame索引分为两种,一种真实序号索引,0代表第一行,1代表第二行,依此类推;另一种是标签索引,行序号或列序号可以用标签,比如说'a','b'等等;分别对应iloc与loc函数;iloc是一种真实序号索引;loc是一种标签索引;ix是混合标签;有一种情况在ix时需要特别注意,如果标签是整数序列,那么真实序号索引就用不了,只能当作loc来用;查看官方解释:However, when an axis is integer based, ONLY label based access and not positional access is supported. Thus, in such cases, it's usually better to be explicit and use ``.iloc`` or ``.loc``.

曾经犯的错:df.ix[0,'close']并没有取到第一行;后来对这种情况统一采用df['close].iloc[0]这种方式;先通过标签定位到列,然后用iloc定位到自己想要的真实序号的行;

来看一个案例:

代码如下:

import numpy as np
import pandas as pd
import math

data=[[0,0,0,2,2],
                [0,0,0,3,3],
                [0,0,0,1,1],
                [1,1,1,0,0],
                [2,2,2,0,0],
                [5,5,5,0,0],
                [1,1,1,0,0]]
#u, sigma, vt = np.linalg.svd(data)
df=pd.DataFrame(data)
print(df)
print(df.iloc[0])#定位到第一行
df=df.sort_values(0,ascending=False)#按列标签0排序;
#print(help(df.ix))
print(df)
print(df.ix[0])#定位到标签0
df.drop(0,axis=0,inplace=True)#删除指定0标签的行;所以0标签的行就不存在了
print(df)
print(df.ix[0])#不存在0标签,索引就会犯错

注意细节:1、drop第一个参数传入的是labels,官方解释如下 :

2、sort_values第一个参数传入的是labels;官方解释传入字符串,str or list of str;测试如下:
df=df.sort_values(0,ascending=False)
df.columns=list('abcde')
print(df)
df=df.sort_values(0,ascending=False)
print(df)

从这里可以证明传入必须是label,传入整数时,就将整数当作了label如同行索引一样的;官方帮助文档的解释是不足的,没有考虑传入整数的情况;

看代码:
print(type(df.columns[0]))#  int

df.columns=list('abcde')
print(type(df.columns[0])) # str

df=pd.DataFrame(data)
print(type(df.columns[0]))
print(df)
print(df.iloc[0])
df=df.sort_values(0,ascending=False)
df.columns=list('01234')
print(type(df.columns[0]))
print(df)
df=df.sort_values(0,ascending=False)#这里就报错了,因为不存在整数0标签,只存在字符串‘0’标签;
print(df)

结论:sort_values传入是标签,和drop一样;

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值