python DataFrame获取行数、列数、索引及第几行第几列的值 - 小众知识

python DataFrame获取行数、列数、索引及第几行第几列的值

2013年01月27日 14:18:05 苏内容
  标签: python/DataFrame
阅读:7328

1、 
df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}])

print df.columns.size#列数 2
print df.iloc[:,0].size#行数 3
print df.ix[[0]].index.values[0]#索引值 0
print df.ix[[0]].values[0][0]#第一行第一列的值 11
print df.ix[[1]].values[0][1]#第二行第二列的值 121

以下实验中的train.csv文件使用Digit Recognizer中的训练数据集

import pandas as pd  # 引用pandas库import numpy as np # 引用Numpy库dataset = pd.read_csv("../data/train.csv") #读取csv文件
  • 1
  • 2
  • 3
  • 4
dataset.head()  # 查看数据前5行
  • 1

这里写图片描述


# 随机构造一个5行3列的DataFrame数据,列名分别定义为‘ABC’,行索引间隔为2
 df = pd.DataFrame(np.arange(15).reshape(5,3),index=list('abcde'),columns=list('ABC')) #

    A   B   C
a   0   1   2b   3   4   5c   6   7   8d   9  10  11e  12  13  14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
df.irow(0) #取df的第一行, FutureWarning: irow(i) is deprecated. Please use .iloc[i]

A    0B    1C    2Name: a, dtype: int32

df.iloc[0] #取df的第一行

A    0B    1C    2Name: a, dtype: int32

df.iloc[[2]] # 按照index的序值,选择第3行
   A  B  C
c  6  7  8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
df.loc[['b']] # 按照index的具体值,选择索引为'b'的那一行
   A  B  C
b  3  4  5
  • 1
  • 2
  • 3
df['A'] # 选择表格中的'A'列,使用类字典属性,返回的是Series类型

a     0b     3c     6d     9e    12Name: A, dtype: int32
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
df.A # 选择表格中的'A'列,使用点属性,返回的是Series类型a    1.470787b    0.253183c   -0.061858d    0.203922e    0.364775Name: A, dtype: float64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
df[['A']] # 选择表格中的'A'列,返回的是DataFrame类型
    A
a   0b   3c   6d   9e  12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
df[['A','B']] # 选择表格中的'A'、'B'列

    A   B
a   0   1b   3   4c   6   7d   9  10e  12  13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
df[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后

   A  B  Ca  0  1  2b  3  4  5
  • 1
  • 2
  • 3
  • 4
  • 5
df[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
        #如果采用data[1]则报错   A  B  Cb  3  4  5df.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟df[1:2]同   A  B  Cb  3  4  5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
df['a':'b'] #利用index值进行切片,返回的是**前闭后闭**的DataFrame, 
            #即末端是包含的  

   A  B  Ca  0  1  2b  3  4  5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
df.icol(0) # 取df的第一列 ,FutureWarning: icol(i) is deprecated. Please use .iloc[:,i]a     0b     3c     6d     9e    12Name: A, dtype: int32

df.iloc[:,0] #取df的第一列a     0b     3c     6d     9e    12Name: A, dtype: int32
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
df.tail(3) #返回df的后3行数据,默认为后五行,需要后十行则df.tail(10)

    A   B   C
c   6   7   8d   9  10  11e  12  13  14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
df.iloc[-1] #选取DataFrame最后一行,返回的是SeriesA    12B    13C    14Name: e, dtype: int32

df.iloc[-1:] #选取DataFrame最后一行,返回的是DataFrame

    A   B   C
e  12  13  14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
df.loc['a',['B','C']] #返回‘a’行'B'、'C'列,这种用于选取行索引列索引已知

B    1C    2Name: a, dtype: int32
  • 1
  • 2
  • 3
  • 4
  • 5
df.iat[1,1] #选取第二行第二列,用于已知行、列位置的选取。4
  • 1
  • 2
df.ix[:,[0,1,2]] #不知道列名只知道列的位置时

    A   B   Ca   0   1   2b   3   4   5c   6   7   8d   9  10  11e  12  13  14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

选择DataFrame中列名以XXX开头的列:

import pandas as pdimport numpy as np

df = pd.DataFrame({'foo.aa': [1, 2.1, np.nan, 4.7, 5.6, 6.8],                   'foo.fighters': [0, 1, np.nan, 0, 0, 0],                   'foo.bars': [0, 0, 0, 0, 0, 1],                   'bar.baz': [5, 5, 6, 5, 5.6, 6.8],                   'foo.fox': [2, 4, 1, 0, 0, 5],                   'nas.foo': ['NA', 0, 1, 0, 0, 0],                   'foo.manchu': ['NA', 0, 0, 0, 0, 0],})

df[df.columns[pd.Series(df.columns).str.startswith('foo')]]
>   foo.aa  foo.bars  foo.fighters  foo.fox foo.manchu0     1.0         0             0        2         NA1     2.1         0             1        4          02     NaN         0           NaN        1          03     4.7         0             0        0          04     5.6         0             0        0          05     6.8         1             0        5          0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

参考引用:http://blog.csdn.net/xiaodongxiexie/article/details/53108959



在dataframe中根据一定的条件,得到符合要求的某行元素所在的位置。

代码如下所示:

[python] view plain copy
  1. df = pd.DataFrame({'BoolCol': [1, 2, 3, 3, 4],'attr': [22, 33, 22, 44, 66]},  
  2.        index=[10,20,30,40,50])  
  3. print(df)  
  4. a = df[(df.BoolCol==3)&(df.attr==22)].index.tolist()  
  5. print(a)  

df如下所示,以上通过选取“BoolCol”取值为3且“attr”取值为22的行,得到该行在df中的位置

注意:返回的位置为index列表,根据index的不同而不同,这点易于数组中默认的下标。

[python] view plain copy
  1.     BoolCol  attr  
  2. 10        1    22  
  3. 20        2    33  
  4. 30        3    22  
  5. 40        3    44  
  6. 50        4    66  
  7. [30]  


扩展阅读