实验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

猜你喜欢

转载自www.cnblogs.com/hany-postq473111315/p/12932750.html
今日推荐