数据查询分析
1.1数据的建立
# coding:utf-8 # 编码申请
import pandas as pd # 导入pandas工具包,pd可以理解为给工具包起的别名
from pandas import DataFrame # 表示pandas中要导入的类
data = {'ID':['000001','000002','000003','000004','000005','000006','000007'],
'name':['黎明', '赵怡春','张富平','白丽', '牛玉德', '姚华', '李南'],
'gender':[True, False, True, False, True, False, True],
'age':[16,20,18,18,17,18,16],
'height':[1.88,1.78,1.81,1.86,1.74,1.75,1.76]}
# 变量不用加引号,字符需要加引号
frame = pd.DataFrame(data)
# 包中的类用.表示,括号里面可以理解为参数,即表示根据什么数据来生成DataFrame
# frame = pd.DataFrame(data,index=[6,5,4,3,2,1,0])
# index参数可以改变索引号
print(frame)
1.2数据的选择
# 显示所有学生姓名
print(frame['name'])
print(frame.name)
# 结果一样
# 显示多个列
print(frame[['name','age']])
# frame后面的[]只能放一个变量,需要再次使用方括号将两字段括起来
# 行的显示
print(frame[0:1])
# 这里的数字并非索引号,而是按序得到的行号
print(frame[2:4])
print(frame[2:7:2]) # 每2个取一个
# 行列选择
# 两者谁在前谁在后效果一样
print(frame['name'][1:2])
print(frame[1:2]['name'])
# 利用特殊函数loc读取
# 索引号为1的第二行
print(frame.loc[1])
# 通过冒号选择连续的多行,loc中,下界要算
print(frame.loc[1:3])
# 通过逗号选择多个不连续的行
print(frame.loc[[1,3]]) # 里面[]括起来一个列表,外面[]表示loc函数的参数
# frame[]与frame.loc[]区别
# frame[]里面是序号,frame.loc[]里面参数是索引号
frame = pd.DataFrame(data,index=[101,102,103,104,105,106,107])
print(frame[0:1])
print(frame[101:103]) #无结果
print(frame.loc[0:1]) #无结果
print(frame.loc[101:103])
# 利用loc读取列 逗号前:行 逗号后:列
print(frame.loc[:,['name']])
print(frame.loc[:,['name','age']])
# 选择任意单元格
print(frame.loc[105:106,['age','height']])
# iloc函数使用
# iloc函数,根据序号来访问行和列
print(frame.iloc[1,3]) # 表示第2行 第4列
# 根据区间的选择方法
print(frame.iloc[1:2,0:3])
# 任意选择
print(frame.iloc[[3,1],[0,2]]) # 表示第4和第2行 同时第1和第3列
# 依据条件选择行
# 获取年龄大于17岁的学生姓名
print(frame[frame['age']>17]) # 选择行的方法是在方括号里表达一个列的比较条件
# 年龄大于17岁并且身高大于1.80
print(frame[ (frame['age']>17) & (frame['height']>1.80) ] )
# 对于布尔类型条件,判断是否等于真假需要使用==
print(frame[ (frame['age']>17) & (frame['gender']==True) ] )
# 使用isin表示一个离散的范围
print(frame[frame['age'].isin([20,16])]) # 所有年龄在20或者16的学生信息
# 条件选择任意组合
print(frame['name'][[2,3]][(frame['height']>1.80)])
# 查询身高大于1.80的男生姓名
print(frame['name'][(frame['height']>1.80)&(frame['gender']==True)])
1.3数据的显示
# 真的替换列名
frame.columns = ['学号','姓名','性别','年龄','身高']
# 临时性替换
print(frame.rename(columns={'ID':'学号','name':'姓名','gender':'性别'}))
# 分开显示姓
print(frame['name'].str[0:1])
# 字符串相加形成更多显示效果
print(frame['name'].str[0:1]+'同学')
# 形成计算列,并存储下来
frame['newname']=frame['name'].str[0:1]+'同学'
print(frame)
# 不同类型列调用自己不同类型的方法
print(frame['height'].round(1))
# 索引号的显示
# 直接设定index属性
frame.index = [6,5,4,3,2,1,0]
# 可以按照rename,指定改变index
print(frame.rename(index={0:6, 1:5, 2:4, 3:3, 4:2, 5:1, 6:0}))
# 整体格式化输出
print(frame.to_html())
# 可生成一个网页代码,保存在记事本中,以.html结尾,再次打开,就可看见真正表格