实验1-5
Django暂时停止更新,先把学校实验报告弄完
'''
计算
1.输入半径,输出面积和周长
2.输入面积,输出半径及周长
3.输入周长,输出半径及面积
'''
'''1.输入半径,输出面积和周长'''
from math import pi
'''定义半径'''
r = int(input("请输入半径的值(整数)"))
if r <= 0 :
exit("请重新输入半径")
''' S 面积: pi * r * r '''
S = pi * pow(r,2)
print(" 半径为 %d 的圆,面积为 %.2f"%(r,S))
'''C 周长: C = 2 * pi * r '''
C = 2 * pi * r
print(" 半径为 %d 的圆,周长为 %.2f"%(r,C))
'''2.输入面积,输出半径及周长'''
from math import pi,sqrt
S = float(input("请输入圆的面积(支持小数格式)"))
if S < 0 :
exit("请重新输入面积")
'''r 半径: r = sqrt(S/pi)'''
r = sqrt(S/pi)
print("面积为 %.2f 的圆,半径为 %.2f"%(S,r))
'''C 周长: C = 2 * pi * r '''
C = 2 * pi * r
print("面积为 %.2f 的圆,周长为 %.2f"%(S,C))
'''3.输入周长,输出半径及面积'''
from math import pi
C = float(input("请输入圆的周长(支持小数格式)"))
if C < 0 :
exit("请重新输入周长")
'''r 半径: r = C/(2*pi)'''
r = C/(2*pi)
print("周长为 %.2f 的圆,半径为 %.2f"%(C,r))
''' S 面积: pi * r * r '''
S = pi * pow(r,2)
print("周长为 %.2f 的圆,面积为 %.2f"%(C,S))
'''
数据结构
列表练习
1.创建列表对象 [110,'dog','cat',120,'apple']
2.在字符串 'dog' 和 'cat' 之间插入空列表
3.删除 'apple' 这个字符串
4.查找出 110、120 两个数值,并以 10 为乘数做自乘运算
'''
'''1.创建列表对象 [110,'dog','cat',120,'apple']'''
# '''创建一个名为 lst 的列表对象'''
lst = [110,'dog','cat',120,'apple']
print(lst)
'''2.在字符串 'dog' 和 'cat' 之间插入空列表'''
lst = [110,'dog','cat',120,'apple']
'''添加元素到 'dog' 和 'cat' 之间'''
lst.insert(2,[])
print(lst)
'''3.删除 'apple' 这个字符串'''
lst = [110,'dog','cat',120,'apple']
'''删除最后一个元素'''
lst.pop()
print(lst)
'''4.查找出 110、120 两个数值,并以 10 为乘数做自乘运算'''
lst = [110,'dog','cat',120,'apple']
try:
'''如果找不到数据,进行异常处理'''
lst[lst.index(110)] *= 10
lst[lst.index(120)] *= 10
except Exception as e:
print(e)
print(lst)
'''
元组练习
1.创建列表 ['pen','paper',10,False,2.5] 赋给变量并查看变量的类型
2.将变量转换为 tuple 类型,查看变量的类型
3.查询元组中的元素 False 的位置
4.根据获得的位置提取元素
'''
'''1.创建列表 ['pen','paper',10,False,2.5] 赋给变量并查看变量的类型'''
lst = ['pen','paper',10,False,2.5]
'''查看变量类型'''
print("变量的类型",type(lst))
'''2.将变量转换为 tuple 类型,查看变量的类型'''
lst = tuple(lst)
print("变量的类型",type(lst))
'''3.查询元组中的元素 False 的位置'''
if False in lst:
print("False 的位置为(从0开始): ",lst.index(False))
'''4.根据获得的位置提取元素'''
print("根据获得的位置提取的元素为: ",lst[lst.index(False)])
else:
print("不在元组中")
'''
1.创建字典{‘Math’:96,’English’:86,’Chinese’:95.5,
’Biology’:86,’Physics’:None}
2.在字典中添加键对{‘Histore’:88}
3.删除{’Physics’:None}键值对
4.将键‘Chinese’所对应的值进行四舍五入后取整
5.查询键“Math”的对应值
'''
'''1.创建字典'''
dic = {'Math':96,'English':86,'Chinese':95.5,'Biology':86,'Physics':None}
print(dic)
'''2.添加键值对'''
dic['Histore'] = 88
print(dic)
'''3.删除{’Physics’:None}键值对'''
del dic['Physics']
print(dic)
'''4.将键‘Chinese’所对应的值进行四舍五入后取整'''
print(round(dic['Chinese']))
'''5.查询键“Math”的对应值'''
print(dic['Math'])
'''
1.创建列表[‘apple’,’pear’,’watermelon’,’peach’]并赋给变量
2.用list()创建列表[‘pear’,’banana’,’orange’,’peach’,’grape’],并赋给变量
3.将创建的两个列表对象转换为集合类型
4.求两个集合的并集、交集和差集
'''
'''1.创建列表'''
lst = ['apple','pear','watermelon','peach']
print(lst)
'''2.用list()创建,并赋给变量'''
lstTwo = list(('pear','banana','orange','peach','grape'))
print(lstTwo)
'''3.将创建的两个列表对象转换为集合类型'''
lst = set(lst)
lstTwo = set(lstTwo)
'''4.求两个集合的并集、交集和差集'''
print("并集是:",lst | lstTwo)
print("交集是:",lst & lstTwo)
print("差集:")
print(lst - lstTwo)
print(lstTwo - lst)
'''
1 输出数字金字塔
(1)设置输入语句,输入数字
(2)创建变量来存放金字塔层数
(3)编写嵌套循环,控制变量存放每一层的长度
(4)设置条件来打印每一行输出的数字
(5)输出打印结果
'''
num = int(input("请输入金字塔的层数"))
'''cs 层数'''
cs = 1
while cs <= num:
kk = 1
t = cs
length = 2*t - 1
while kk <= length:
if kk == 1:
if kk == length:
print(format(t,str(2*num-1)+"d"),'\n')
break
else:
print(format(t,str(2*num+1 - 2*cs) + "d"),"",end = "")
t -= 1
else:
if kk == length:
'''最右侧数字 length 位置上数字为 t'''
print(t,"\n")
break
elif kk <= length/2:
'''到中间的数字不断减小'''
print(t,"",end = "")
t -= 1
else:
'''中间的数字到右侧的数字不断增大'''
print(t,"",end = "")
t += 1
kk += 1
'''层数加 1'''
cs += 1
'''
(1)使用自定义函数,完成对程序的模块化
(2)学生信息至少包括:姓名、性别及手机号
(3)该系统具有的功能:添加、删除、修改、显示、退出系统
'''
'''创建一个容纳所有学生的基本信息的列表'''
stusInfo = []
def menu():
'''定义页面显示'''
print('-'*20)
print('学生管理系统')
print('1.添加学生信息')
print('2.删除学生信息')
print('3.修改学生信息')
print('4.显示所有学生信息')
print('0.退出系统')
print('-' * 20)
def addStuInfo():
'''添加学生信息'''
'''设置变量容纳学生基本信息'''
newStuName = input('请输入新学生的姓名')
newStuGender = input('请输入新学生的性别')
newStuPhone = input('请输入新学生的手机号')
'''设置字典将变量保存'''
newStudent = {}
newStudent['name'] = newStuName
newStudent['gender'] = newStuGender
newStudent['phone'] = newStuPhone
'''添加到信息中'''
stusInfo.append(newStudent)
def delStuInfo():
'''删除学生信息'''
showStusInfo()
defStuId = int(input('请输入要删除的序号:'))
'''从列表中删除 该学生'''
del stusInfo[defStuId - 1]
def changeStuInfo():
'''修改学生信息'''
showStusInfo()
'''查看修改的学生序号'''
stuId = int(input("请输入需要修改的学生的序号: "))
changeStuName = input('请输入修改后的学生的姓名')
changeStuGender = input('请输入修改后的学生的性别')
changeStuPhone = input('请输入修改后的学生的手机号')
'''对列表修改学生信息'''
stusInfo[stuId - 1]['name'] = changeStuName
stusInfo[stuId - 1]['gender'] = changeStuGender
stusInfo[stuId - 1]['phone'] = changeStuPhone
def showStusInfo():
print('-'*30)
print("学生的信息如下:")
print('-'*30)
print('序号 姓名 性别 手机号码')
'''展示学生序号(位置),姓名,性别,手机号码'''
stuAddr = 1
for stuTemp in stusInfo:
print("%d %s %s %s"%(stuAddr,stuTemp['name'],stuTemp['gender'],stuTemp['phone']))
stuAddr += 1
def main():
'''主函数'''
while True:
'''显示菜单'''
menu()
keyNum = int(input("请输入功能对应的数字"))
if keyNum == 1:
addStuInfo()
elif keyNum == 2:
delStuInfo()
elif keyNum == 3:
changeStuInfo()
elif keyNum == 4:
showStusInfo()
elif keyNum == 0:
print("欢迎下次使用")
break
if __name__ == '__main__':
main()
import numpy as np
'''一维数组'''
'''np.array 方法'''
print(np.array([1,2,3,4]))
# [1 2 3 4]
print(np.array((1,2,3,4)))
# [1 2 3 4]
print(np.array(range(4)))
# [0 1 2 3]
'''np.arange 方法'''
print(np.arange(10))
# [0 1 2 3 4 5 6 7 8 9]
'''np.linspace 方法'''
print(np.linspace(0,10,11))
# [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
print(np.linspace(0,10,11,endpoint = False))
# [0. 0.90909091 1.81818182 2.72727273 3.63636364 4.54545455
# 5.45454545 6.36363636 7.27272727 8.18181818 9.09090909]
'''np.logspace 方法'''
print(np.logspace(0,100,10))
# [1.00000000e+000 1.29154967e+011 1.66810054e+022 2.15443469e+033
# 2.78255940e+044 3.59381366e+055 4.64158883e+066 5.99484250e+077
# 7.74263683e+088 1.00000000e+100]
print(np.logspace(1,4,4,base = 2))
# [ 2. 4. 8. 16.]
'''zeros 方法'''
print(np.zeros(3))
# [0. 0. 0.]
'''ones 方法'''
print(np.ones(3))
# [1. 1. 1.]
'''二维数组'''
'''np.array 方法'''
print(np.array([[1,2,3],[4,5,6]]))
# [[1 2 3]
# [4 5 6]]
'''np.identify 方法'''
print(np.identity(3))
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
'''np.empty 方法'''
print(np.empty((3,3)))
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
'''np.zeros 方法'''
print(np.zeros((3,3)))
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
'''np.ones 方法'''
print(np.ones((3,3)))
# [[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]]
import numpy as np
'''一维数组'''
'''np.random.randint 方法'''
print(np.random.randint(0,6,3))
# [4 2 1]
'''np.random.rand 方法'''
print(np.random.rand(10))
# [0.12646424 0.59660184 0.52361248 0.1206141 0.28359949 0.46069696
# 0.18397493 0.73839455 0.99115088 0.98297331]
'''np.random.standard_normal 方法'''
print(np.random.standard_normal(3))
# [-0.12944733 -0.32607943 0.58582095]
'''二维数组'''
'''np.random.randint 方法'''
print(np.random.randint(0,6,(3,3)))
# [[0 0 0]
# [4 4 0]
# [5 0 3]]
'''多维数组'''
print(np.random.standard_normal((3,4,2)))
# [[[-0.79751104 -1.40814148]
# [-1.06189896 1.19993648]
# [ 1.68883868 0.09190824]
# [ 0.33723433 0.28246094]]
#
# [[ 0.3065646 1.1177714 ]
# [-0.48928572 0.55461195]
# [ 0.3880272 -2.27673705]
# [-0.97869759 -0.07330554]]
#
# [[ 0.62155155 -0.17690222]
# [ 1.61473949 -0.34930031]
# [-1.41535777 1.32646137]
# [-0.22865775 -2.00845225]]]
import numpy as np
n = np.array([10,20,30,40])
print(n + 5)
# [15 25 35 45]
print(n - 10)
# [ 0 10 20 30]
print(n * 2)
# [20 40 60 80]
print(n / 3)
# [ 3.33333333 6.66666667 10. 13.33333333]
print(n // 3)
# [ 3 6 10 13]
print(n % 3)
# [1 2 0 1]
print(n ** 2)
# [ 100 400 900 1600]
n = np.array([1,2,3,4])
print(2 ** n)
# [ 2 4 8 16]
print(16//n)
# [16 8 5 4]
print(np.array([1,2,3,4]) + np.array([1,1,2,2]))
# [2 3 5 6]
print(np.array([1,2,3,4]) + np.array(4))
# [5 6 7 8]
print(n)
# [1 2 3 4]
print(n + n)
# [2 4 6 8]
print(n - n)
# [0 0 0 0]
print(n * n)
# [ 1 4 9 16]
print(n / n)
# [1. 1. 1. 1.]
print(n ** n)
# [ 1 4 27 256]
x = np.array([4,7,3])
print(np.argsort(x))
# [2 0 1]
print(x.argmax())
# 1
print(x.argmin())
# 2
print(np.sort(x))
# [3 4 7]
print(np.where(x < 5,0,1))
x = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(x)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
x.resize((2,5))
print(x)
# [[1 2 3 4 5]
# [6 7 8 9 0]]
print(np.piecewise(x,[x<3],[lambda x:x + 1]))
# [[2 3 0 0 0]
# [0 0 0 0 1]]
import pandas as pd
import numpy as np
'''对 sepal_length 这一列进行分析'''
irisSepalLength = np.loadtxt('iris.csv')
print(irisSepalLength[:5])
# [5.1 4.9 4.7 4.6 5. ]
'''对数据进行排序'''
irisSepalLength.sort()
print(irisSepalLength[:15])
# [4.3 4.4 4.4 4.4 4.5 4.6 4.6 4.6 4.6 4.7 4.7 4.8 4.8 4.8 4.8]
'''查看去重后的数据集'''
print(np.unique(irisSepalLength)[:15])
# [4.3 4.4 4.5 4.6 4.7 4.8 4.9 5. 5.1 5.2 5.3 5.4 5.5 5.6 5.7]
'''查看长度的总和'''
print(np.sum(irisSepalLength))
# 876.5
'''累计和'''
print(np.cumsum(irisSepalLength)[:10])
# [ 4.3 8.7 13.1 17.5 22. 26.6 31.2 35.8 40.4 45.1]
'''均值'''
print(np.mean(irisSepalLength))
# 5.843333333333334
'''标准差'''
print(np.std(irisSepalLength))
# 0.8253012917851409
'''方差'''
print(np.var(irisSepalLength))
# 0.6811222222222223
'''最小值'''
print(np.min(irisSepalLength))
# 4.3
'''最大值'''
print(np.max(irisSepalLength))
# 7.9
import pandas as pd
'''创建 Series 对象 s'''
s = pd.Series(range(1,20,5))
print(s)
# 0 1
# 1 6
# 2 11
# 3 16
# dtype: int64
s = pd.Series({'语文':90,'数学':92,'物理':88,'化学':99})
print(s)
# 语文 90
# 数学 92
# 物理 88
# 化学 99
# dtype: int64
'''修改数据'''
s['语文'] = 100
print(s)
# 语文 100
# 数学 92
# 物理 88
# 化学 99
# dtype: int64
'''使用绝对值'''
print(abs(s))
# 语文 100
# 数学 92
# 物理 88
# 化学 99
# dtype: int64
'''对数据列加后缀'''
# s.add_suffix('后缀')
'''查看某些数据是否满足条件'''
print(s.between(90,99,inclusive = True))
# 语文 False
# 数学 True
# 物理 False
# 化学 True
# dtype: bool
'''查看属性最大的列名'''
print(s.idxmax())
# 语文
'''查看属性最小的列名'''
print(s.idxmin())
# 物理
'''大于 95 的列'''
print(s[s > 95])
# 语文 100
# 化学 99
# dtype: int64
'''查看中值'''
print(s.median())
# 95.5
'''大于中值的列'''
print(s[s > s.median()])
# 语文 100
# 化学 99
# dtype: int64
'''查看最小的 3 个值'''
print(s.nsmallest(3))
# 物理 88
# 数学 92
# 化学 99
# dtype: int64
'''查看最大的 3 个值'''
print(s.nlargest(3))
# 语文 100
# 化学 99
# 数学 92
# dtype: int64
'''两个 Series 对象进行相加'''
print(pd.Series(range(5)) + pd.Series(range(7,12)))
# 0 7
# 1 9
# 2 11
# 3 13
# 4 15
# dtype: int64
'''对 Series 对象使用函数'''
print(pd.Series(range(5)).pipe(lambda x,y:(x**y),4))
# 0 0
# 1 1
# 2 16
# 3 81
# 4 256
# dtype: int64
print(pd.Series(range(5)).pipe(lambda x:x + 3))
# 0 3
# 1 4
# 2 5
# 3 6
# 4 7
# dtype: int64
print(pd.Series(range(5)).apply(lambda x:x + 3))
# 0 3
# 1 4
# 2 5
# 3 6
# 4 7
# dtype: int64
'''查看标准差方差'''
print(s)
print(s.std())
# 5.737304826019502
print(s.var())
# 32.916666666666664
'''查看是否全部为真'''
print(any(pd.Series([1,0,1])))
# True
print(all(pd.Series([1,0,1])))
# False
import pandas as pd
import numpy as np
'''创建一个 DataFrame 对象'''
df = pd.DataFrame(np.random.randint(1,5,(5,3)),index = range(5),columns = ['A','B','C'])
print(df)
# A B C
# 0 4 4 2
# 1 1 4 1
# 2 4 3 4
# 3 3 1 3
# 4 2 3 1
'''读取数据'''
market = pd.read_excel('超市营业额.xlsx')
print(market.head())
# 工号 姓名 日期 时段 交易额 柜台
# 0 1001 张三 2019-03-01 9:00-14:00 1664.0 化妆品
# 1 1002 李四 2019-03-01 14:00-21:00 954.0 化妆品
# 2 1003 王五 2019-03-01 9:00-14:00 1407.0 食品
# 3 1004 赵六 2019-03-01 14:00-21:00 1320.0 食品
# 4 1005 周七 2019-03-01 9:00-14:00 994.0 日用品
'''查看不连续行的数据'''
print(market.iloc[[1,8,19],:])
# 工号 姓名 日期 时段 交易额 柜台
# 1 1002 李四 2019-03-01 14:00-21:00 954.0 化妆品
# 8 1001 张三 2019-03-02 9:00-14:00 1530.0 化妆品
# 19 1004 赵六 2019-03-03 14:00-21:00 1236.0 食品
print(market.iloc[[1,8,19],[1,4]])
# 姓名 交易额
# 1 李四 954.0
# 8 张三 1530.0
# 19 赵六 1236.0
'''查看前五条记录的 姓名 时段 和 交易额'''
print(market[['姓名','时段','交易额']].head())
# 姓名 时段 交易额
# 0 张三 9:00-14:00 1664.0
# 1 李四 14:00-21:00 954.0
# 2 王五 9:00-14:00 1407.0
# 3 赵六 14:00-21:00 1320.0
# 4 周七 9:00-14:00 994.0
print(market.loc[[3,4,7],['姓名','时段','柜台']])
# 姓名 时段 柜台
# 3 赵六 14:00-21:00 食品
# 4 周七 9:00-14:00 日用品
# 7 张三 14:00-21:00 蔬菜水果
'''查看交易额大于 2000 的数据'''
print(market[market.交易额 > 1500].head())
# 工号 姓名 日期 时段 交易额 柜台
# 0 1001 张三 2019-03-01 9:00-14:00 1664.0 化妆品
# 8 1001 张三 2019-03-02 9:00-14:00 1530.0 化妆品
# 14 1002 李四 2019-03-02 9:00-14:00 1649.0 蔬菜水果
# 18 1003 王五 2019-03-03 9:00-14:00 1713.0 食品
# 20 1005 周七 2019-03-03 9:00-14:00 1592.0 日用品
'''查看交易额的总和'''
print(market['交易额'].sum())
# 327257.0
print(market[market['时段'] == '9:00-14:00']['交易额'].sum())
# 176029.0
'''查看某员工在 14:00-21:00 的交易数据'''
print(market[(market.姓名 == '张三') & (market.时段 == '14:00-21:00')].head())
# 工号 姓名 日期 时段 交易额 柜台
# 7 1001 张三 2019-03-01 14:00-21:00 1442.0 蔬菜水果
# 39 1001 张三 2019-03-05 14:00-21:00 856.0 蔬菜水果
# 73 1001 张三 2019-03-10 14:00-21:00 1040.0 化妆品
# 91 1001 张三 2019-03-12 14:00-21:00 1435.0 食品
# 99 1001 张三 2019-03-13 14:00-21:00 1333.0 食品
'''查看交易额在 1500 到 2500 的数据'''
print(market[market['交易额'].between(1500,2000)].head())
# 工号 姓名 日期 时段 交易额 柜台
# 0 1001 张三 2019-03-01 9:00-14:00 1664.0 化妆品
# 8 1001 张三 2019-03-02 9:00-14:00 1530.0 化妆品
# 14 1002 李四 2019-03-02 9:00-14:00 1649.0 蔬菜水果
# 18 1003 王五 2019-03-03 9:00-14:00 1713.0 食品
# 20 1005 周七 2019-03-03 9:00-14:00 1592.0 日用品
'''查看描述'''
print(market['交易额'].describe())
# count 246.000000
# mean 1330.313008
# std 904.300720
# min 53.000000
# 25% 1031.250000
# 50% 1259.000000
# 75% 1523.000000
# max 12100.000000
# Name: 交易额, dtype: float64
print(market['交易额'].quantile([0,0.25,0.5,0.75,1]))
# 0.00 53.00
# 0.25 1031.25
# 0.50 1259.00
# 0.75 1523.00
# 1.00 12100.00
# Name: 交易额, dtype: float64
'''查看中值'''
print(market['交易额'].median())
# 1259.0
'''查看最大值'''
print(market['交易额'].max())
# 12100.0
print(market['交易额'].nlargest(5))
# 105 12100.0
# 223 9031.0
# 113 1798.0
# 188 1793.0
# 136 1791.0
'''查看最小值'''
print(market['交易额'].min())
# 53.0
print(market['交易额'].nsmallest(5))
# 76 53.0
# 97 98.0
# 194 114.0
# 86 801.0
# 163 807.0
# Name: 交易额, dtype: float64
import pandas as pd
market = pd.read_excel('超市营业额.xlsx')
print(market.head())
# 工号 姓名 日期 时段 交易额 柜台
# 0 1001 张三 2019-03-01 9:00-14:00 1664.0 化妆品
# 1 1002 李四 2019-03-01 14:00-21:00 954.0 化妆品
# 2 1003 王五 2019-03-01 9:00-14:00 1407.0 食品
# 3 1004 赵六 2019-03-01 14:00-21:00 1320.0 食品
# 4 1005 周七 2019-03-01 9:00-14:00 994.0 日用品
'''对数据进行排序'''
print(market.sort_values(by = ['交易额','工号'],ascending = False).head())
# 工号 姓名 日期 时段 交易额 柜台
# 105 1001 张三 2019-03-14 9:00-14:00 12100.0 日用品
# 223 1003 王五 2019-03-28 9:00-14:00 9031.0 食品
# 113 1002 李四 2019-03-15 9:00-14:00 1798.0 日用品
# 188 1002 李四 2019-03-24 14:00-21:00 1793.0 蔬菜水果
# 136 1001 张三 2019-03-17 14:00-21:00 1791.0 食品
print(market.sort_values(by = ['交易额','工号'],ascending = True).head())
# 工号 姓名 日期 时段 交易额 柜台
# 76 1005 周七 2019-03-10 9:00-14:00 53.0 日用品
# 97 1002 李四 2019-03-13 14:00-21:00 98.0 日用品
# 194 1001 张三 2019-03-25 14:00-21:00 114.0 化妆品
# 86 1003 王五 2019-03-11 9:00-14:00 801.0 蔬菜水果
# 163 1006 钱八 2019-03-21 9:00-14:00 807.0 蔬菜水果
'''groupby 对象 的使用'''
print(market.groupby(by = lambda x:x%3)['交易额'].sum())
# 0 113851.0
# 1 108254.0
# 2 105152.0
# Name: 交易额, dtype: float64
'''查看 柜台的交易额 '''
print(market.groupby(by = '柜台')['交易额'].sum())
# 柜台
# 化妆品 75389.0
# 日用品 88162.0
# 蔬菜水果 78532.0
# 食品 85174.0
# Name: 交易额, dtype: float64
'''查看日期个数'''
print(market.groupby(by = '姓名')['日期'].count())
# 姓名
# 周七 42
# 张三 38
# 李四 47
# 王五 40
# 赵六 45
# 钱八 37
# Name: 日期, dtype: int64
'''将员工的营业额汇总出来'''
print(market.groupby(by = '姓名')['交易额'].sum().apply(int))
# 姓名
# 周七 47818
# 张三 58130
# 李四 58730
# 王五 58892
# 赵六 56069
# 钱八 47618
# Name: 交易额, dtype: int64
'''查看交易额的 最大最小平均值和中值'''
print(market.groupby(by = '姓名').agg(['max','min','mean','median'])['交易额'])
# max min mean median
# 姓名
# 周七 1778.0 53.0 1195.450000 1134.5
# 张三 12100.0 114.0 1529.736842 1290.0
# 李四 1798.0 98.0 1249.574468 1276.0
# 王五 9031.0 801.0 1472.300000 1227.0
# 赵六 1775.0 825.0 1245.977778 1224.0
# 钱八 1737.0 807.0 1322.722222 1381.0
'''处理异常值'''
# 考虑使用其他数据替代
'''处理缺失值'''
print(market[market['交易额'].isnull()])
# 工号 姓名 日期 时段 交易额 柜台
# 110 1005 周七 2019-03-14 14:00-21:00 NaN 化妆品
# 124 1006 钱八 2019-03-16 14:00-21:00 NaN 食品
# 168 1005 周七 2019-03-21 14:00-21:00 NaN 食品
# 考虑使用 平均值 替换
'''处理重复值'''
# 考虑是否删除数据
'''duplicated() 和 drop_duplicates()'''
'''使用透视表,查看前五天的数据'''
print(market.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'sum').iloc[:,:5])
print(market.pivot_table(values = '交易额',index = '姓名',columns = '柜台',aggfunc = 'count').iloc[:,:5])
'''使用交叉表,查看员工和柜台的次数'''
print(pd.crosstab(market['姓名'],market['柜台']))
# 姓名
# 周七 9 11 14 8
# 张三 19 6 6 7
# 李四 16 9 18 4
# 王五 8 9 9 14
# 赵六 10 18 2 15
# 钱八 0 9 14 14
print(pd.crosstab(market['姓名'],market['日期']))
# 日期 2019-03-01 2019-03-02 2019-03-03 ... 2019-03-29 2019-03-30 2019-03-31
# 姓名 ...
# 周七 1 1 2 ... 1 1 2
# 张三 2 1 1 ... 1 2 0
# 李四 1 2 1 ... 2 2 2
# 王五 1 2 1 ... 1 1 1
# 赵六 1 1 2 ... 2 1 2
# 钱八 2 1 1 ... 1 1 1
print(pd.crosstab(market['姓名'],market['柜台'],market['交易额'],aggfunc = 'mean').apply(lambda x:round(x)))
# 柜台 化妆品 日用品 蔬菜水果 食品
# 姓名
# 周七 1190.0 1169.0 1174.0 1285.0
# 张三 1209.0 3105.0 1211.0 1323.0
# 李四 1279.0 1123.0 1292.0 1224.0
# 王五 1264.0 1262.0 1164.0 1925.0
# 赵六 1232.0 1294.0 1264.0 1196.0
# 钱八 NaN 1325.0 1326.0 1318.0
2020-05-21
本文来自博客园,作者:CodeYaSuo,转载请注明原文链接:https://www.cnblogs.com/hany-postq473111315/p/12932750.html