python中pandas包中的DataFrame有关操作iloc与.loc的区别

来源:互联网 发布:java识别图片中文文字 编辑:程序博客网 时间:2024/05/20 17:41
import numpy as np  import pandas as pd  df = pd.DataFrame(np.arange(0,60,2).reshape(10,3),columns=list('abc'))print(df)
df得到的数据是
    a   b   c0   0   2   41   6   8  102  12  14  163  18  20  224  24  26  285  30  32  346  36  38  407  42  44  468  48  50  529  54  56  58

可以根据每列的索引采用.loc来获取每一列的值,例如df['b']就是取的索引为b的这一列,df['b']的结果如下:

0     21     82    143    204    265    326    387    448    509    56Name: b, dtype: int32
还可以通过每一行的索引和列的索引,把需要的行和列单独取出来.loc主要是针对字符串的,当索引是字符串那么就用.loc,如果索引是数字,
那么就是用.iloc。其实两者的功能差不多,下面举一些.
df.loc[0, 'a']#求得只是第一行第一列的数字
输出:0

df.loc[0:3, ['a', 'b']]#取出0,1,2,3行的a,b两列,                       #如果只取一列那么就这样写df.loc[0:3, 'a']                       #如果取多列,那么要把列用[]放在一起如df.loc[0:3, ['a', 'b']]

输出:   a   b0  0   21  6   82  12  143  18  20


#不想抽取连续的行和列,那么就需要用[]把要取的行和列都列出来#如下df.loc[[1, 5], ['b', 'c']]与df.loc[[1, 5]][['b', 'c']]一个意思,顺带提一下,有的书里面会出现这种格式,很难查到资料,所以在此记录一下
输出:

    b   c1   8  105   32  34


如果我们嫌column name太长了,输入不方便,有或者index是一列时间序列,更不好输入,那就可以选择 .iloc了。这边的 i 我觉得代表index,比较好记点。
df.iloc[1,1]


输出:8
df.iloc[0:3, [0,1]]

输出:
    a   b0   0   21   6   82  12  143  18  20
.iloc让行列切片成为可能,很方便
df.iloc[[0, 3, 5], 0:2]  #补充一下使用切片的列表不包含最后一个数,所以列只取0,1列

输出:   
  a   b0   0   23  18  205  30  32

df.iloc[:, :]#取出所有的行和列df.loc[:][:]#与上面一回事


输出:
     a   b   c0   0   2   41   6   8  102  12  14  163  18  20  224  24  26  285  30  32  346  36  38  407  42  44  468  48  50  529  54  56  58


还有一种就是如下的格式,意思是取出df中第a列中元素等于6的那一行的b列和c列
df.loc[df['a'] == 6][['b', 'c']]


输出:
   b   c1  8  10

 
原创粉丝点击