在数据科学领域python逐渐火热起来,超越了原有R的地位,这里丰富的第三方包的贡献功不可没,数值计算中Numpy和Pandas绝对是必备的神器,最近使用到Pandas来做数据的操作,今天正好有时间就简单地总结记录一点自己学习使用Pandas的体会,主要是对几个主要的数据框索引函数进行讲解和使用,相关的解释都已经在代码里面了,就不再多解释了,配合着我给出来的例子相信还是很容易理解的,下面是具体的实践:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division


'''
__Author__:沂水寒城
功能:Pandas数据框索引函数 iloc、loc和ix学习使用
'''


'''
Pandas库中有iloc和loc以及ix可以用来索引数据,抽取数据。
loc函数是通过行标签索引行数据 
iloc函数是通过行号索引行数据 
ix函数是通过行标签或者行号索引行数据,简单来说就是loc和iloc的混合体 
iloc主要使用数字来索引数据,而不能使用字符型的标签来索引数据。而loc则刚好相反,只能使用字符型标签来索引数据,
不能使用数字来索引数据,不过有特殊情况,当数据框dataframe的行标签或者列标签为数字,loc就可以来其来索引。
ix是一种混合索引,字符型标签和整型数据索引都可以
'''
import sys
import pandas as pd
import numpy as np
reload(sys)
sys.setdefaultencoding('utf-8')


def testFunc():
    '''
    '''
    data=np.arange(36).reshape(6,6)
    print 'data:'
    print data
    df=pd.DataFrame(data)
    print 'dataFrame:'
    print df
    print '-*'*30
    print df.loc[1]
    print '-*'*30
    print df.iloc[1]
    print '-*'*30
    print df.loc[:,[0,4]]
    print '-*'*30
    print df.iloc[:,[0,4]]
    print '-*'*30

    print u"将数值型索引替换为字符型索引:"
    df.index=['ID','Number','Height','Weight','Circle','Space'] 
    print df 
    print '-*'*30
    try:
        print df.loc[0]
    except Exception,e:
        print 'Exception: ',e
    print '-*'*30
    try:
        print df.iloc['Height'] 
    except Exception,e:
        print 'Exception: ',e
    print '-|=|'*30
    print df.iloc[0] 
    print df.loc['Circle']
    print '-*'*30
    
    print u"将数值型列索引替换为字符型列索引:"
    df.columns=['zero','one','two','three','four','five']
    print df
    print '-*'*30
    print df.loc[:,'zero']
    print '-*'*30

    try:
        print df.iloc[:,'one'] 
    except Exception,e:
        print 'Exception: ',e
    print '-*'*30

    print u"ix抽取数据示例"
    print df.ix[5]
    print '-*'*30
    print df.ix[:,'three']
    print '-*'*30
    print df.ix[:,'one']
    print '-*'*30
    print df.ix[:,'five']

    print u"获取多行数据:"
    print df.loc['Height':'Space']
    print df.iloc[2:]
    print df.ix['Height':'Space']
    print df.ix[2:]

    print '*%'*40

    print u"获取多列数据:"
    print df.loc[:,'zero':'four']
    print df.iloc[:,0:5]
    print df.ix[:,'zero':'four']
    print df.ix[:,0:5]



if __name__=='__main__':
    testFunc()

      结果如下:
 

data:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]
 [30 31 32 33 34 35]]
dataFrame:
    0   1   2   3   4   5
0   0   1   2   3   4   5
1   6   7   8   9  10  11
2  12  13  14  15  16  17
3  18  19  20  21  22  23
4  24  25  26  27  28  29
5  30  31  32  33  34  35
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
0     6
1     7
2     8
3     9
4    10
5    11
Name: 1, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
0     6
1     7
2     8
3     9
4    10
5    11
Name: 1, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    0   4
0   0   4
1   6  10
2  12  16
3  18  22
4  24  28
5  30  34
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    0   4
0   0   4
1   6  10
2  12  16
3  18  22
4  24  28
5  30  34
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
将数值型索引替换为字符型索引:
         0   1   2   3   4   5
ID       0   1   2   3   4   5
Number   6   7   8   9  10  11
Height  12  13  14  15  16  17
Weight  18  19  20  21  22  23
Circle  24  25  26  27  28  29
Space   30  31  32  33  34  35
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Exception:  cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [0] of <type 'int'>
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Exception:  cannot do positional indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [Height] of <type 'str'>
-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|-|=|
0    0
1    1
2    2
3    3
4    4
5    5
Name: ID, dtype: int32
0    24
1    25
2    26
3    27
4    28
5    29
Name: Circle, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
将数值型列索引替换为字符型列索引:
        zero  one  two  three  four  five
ID         0    1    2      3     4     5
Number     6    7    8      9    10    11
Height    12   13   14     15    16    17
Weight    18   19   20     21    22    23
Circle    24   25   26     27    28    29
Space     30   31   32     33    34    35
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
ID         0
Number     6
Height    12
Weight    18
Circle    24
Space     30
Name: zero, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Exception:  Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
ix抽取数据示例
zero     30
one      31
two      32
three    33
four     34
five     35
Name: Space, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
ID         3
Number     9
Height    15
Weight    21
Circle    27
Space     33
Name: three, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
ID         1
Number     7
Height    13
Weight    19
Circle    25
Space     31
Name: one, dtype: int32
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
ID         5
Number    11
Height    17
Weight    23
Circle    29
Space     35
Name: five, dtype: int32
获取多行数据:
        zero  one  two  three  four  five
Height    12   13   14     15    16    17
Weight    18   19   20     21    22    23
Circle    24   25   26     27    28    29
Space     30   31   32     33    34    35
        zero  one  two  three  four  five
Height    12   13   14     15    16    17
Weight    18   19   20     21    22    23
Circle    24   25   26     27    28    29
Space     30   31   32     33    34    35
        zero  one  two  three  four  five
Height    12   13   14     15    16    17
Weight    18   19   20     21    22    23
Circle    24   25   26     27    28    29
Space     30   31   32     33    34    35
        zero  one  two  three  four  five
Height    12   13   14     15    16    17
Weight    18   19   20     21    22    23
Circle    24   25   26     27    28    29
Space     30   31   32     33    34    35
*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%
获取多列数据:
        zero  one  two  three  four
ID         0    1    2      3     4
Number     6    7    8      9    10
Height    12   13   14     15    16
Weight    18   19   20     21    22
Circle    24   25   26     27    28
Space     30   31   32     33    34
        zero  one  two  three  four
ID         0    1    2      3     4
Number     6    7    8      9    10
Height    12   13   14     15    16
Weight    18   19   20     21    22
Circle    24   25   26     27    28
Space     30   31   32     33    34
        zero  one  two  three  four
ID         0    1    2      3     4
Number     6    7    8      9    10
Height    12   13   14     15    16
Weight    18   19   20     21    22
Circle    24   25   26     27    28
Space     30   31   32     33    34
        zero  one  two  three  four
ID         0    1    2      3     4
Number     6    7    8      9    10
Height    12   13   14     15    16
Weight    18   19   20     21    22
Circle    24   25   26     27    28
Space     30   31   32     33    34

       在实际的工作中,如果能够很熟练地掌握这些常用的数据操作函数对于效率的提升相信还是很有帮助的。