import pandas as pd
from pandas import DataFrame
data={'ID':['01','02','03','04','05','06','07'],
'name':['张三','李四','王五','赵六','田七','陈八','刘九'],
'gender':[True,False,True,False,True,False,True],
'age':[20,18,19,18,13,17,19],
'height':[1.88,1.68,1.78,1.59,1.70,1.60,1.71]
}
frame = DataFrame(data)
其实对应的表如下:
一、引用列
方法1:frame.name ----只引用name列
注意:这样会出歧义
方法2:frame[['name','age']] --用方括号引用列名
方法3:frame.loc[:,['name']] ---第一个冒号,表示所有行。所有行的name列,即name列
frame.loc[:,['name','age']] ---取name和age列
二、引用行
方法1:frame[0:1] ---0、1是行的序号
frame[2:4] ---取第2行开始到第4行,但不含第4行
frame[2:7:2] ---取第2、4、6行,最后一个2是指间隔2行
方法2:frame.loc[1] ---这里的1是索引号 【结果】是李四所在的行
frame.loc[1:3] ---表示取多行,包含索引3。
frame.loc[[1,3]] ---通过逗号选择多个不连续的行
举例:frame1 = DataFrame(data,index=[101,102,103,104,105,106,107]) 改变索引号
print(frame1[0:1]) ---打印出第0行,‘张三’所在的行
print(frame1[101:103]) ---没有101、102行,所以打印出空行
print(frame1.loc[0:1]) ---没有索引为0、1的行,所以打印空行
print(frame1.loc[101:103]) ---打印出101、102、103所在的行
三、引用行列
1)frame['name'][1:2] 等价于frame[1:2]['name'] ---第1行name列的值
结果:李四
2) frame[5:6,['age','height']] ---索引5、6行的age、height列
3) frame.iloc[1,3] ---第2行,第4列,注意这里又完全按序号选择
frame.iloc[1:2,0:3] ---第2行,前三列,不包含最后的序号
frame.iloc[[3,1],[0,2]] ---第4、2行,第1、3列
方法3:增加条件(难点)
frame[frame['age']>17] ---年龄大于17的所有行
frame[frame['age']>17 & frame['height']>1.80] ---年龄大于17且身高大于1.80
[修正]这个方法有点害人,不知什么原因,真正使用时还是会报错,应该修改为:
frame.loc[frame['age']>17 & frame['height']>1.80] ---年龄大于17且身高大于1.80
frame[frame['age'].isin([20,16])] ---年龄为16或20的
frame['name'][[2,3]][(frame['height']>1.7)] --选择第2条和第3条且身高大于1.7 的姓名 【结果】王五