import pandas as pd df = pd.read_excel('E://data//朝阳医院2018年销售数据.xlsx') df.head() #打印前五行 df.shape #有多少行,多少列 df.dtypes #查看每列的数据类型 colNameDict = {'购药时间':'销售时间'} #列名重命名 df.rename(columns = colNameDict,inplace=True) #将购药时间改为销售时间 inplace=true表示不创建新的对象直接对原有的数据进行更改,false表示创建新的数据对象 df.head() #缺失值的处理 print('删除缺失值前的大小',df.shape) df=df.dropna(subset=['销售时间','社保卡号'],how='any') #删除列(销售时间,社保卡号)中为空的行,其中how='any'意思为给定列中任何一个有空值就删除行 print('删除缺失值后的大小',df.shape) #数据类型的转换 df['销售数量']=df['销售数量'].astype('float') df['应收金额']=df['应收金额'].astype('float') df['社保卡号']=df['社保卡号'].astype('ocject') ##修改日期 def splitsaletime(timeColser): timelist=[] for value in timeColser: #例如2018-01-01 星期五 ,分割后为:2018-01-01 dateStr = value.split(' ')[0] timelist.append(dateStr) timeSer= pd.Series(timelist) #将列表转行为一维数据series类型 return timeSer ##输入:timecolser--销售时间这一列,是个series数据类型 ##输出:分割后的时间,返回也是这个数据类型 timeSer= df.loc[:,'销售时间'] #获取销售时间这一列 dateSer = splitsaletime(timeSer) #对字符串进行分割,获取销售日期 df.loc[:,'销售时间']=dateSer #修改销售时间这一列的值 df.head() #字符串转换日期 df.loc[:,'销售时间']= pd.to_datetime(df.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce') df.dtypes df=df.dropna(subset=['销售时间','社保卡号'],how='any') ##数据排序 #### 使用pd.sort.values方法进行排序,by表示按照那一列进行排序,ascending=true时表示升序排列,false表示降序排列 print('排序前的数据') df.head() df=df.sort_values(by='销售时间',ascending=True) print('排序后的数据') df.head() ##排序后的行号乱了,,需要进行重新的排序 df= df.reset_index(drop=True) df.head() ##异常值的处理,,首先我用describe()方法查看数据框中所有数据每列的描述统计信息、 df.dedscribe() #从结果可以看出销售数量有负值出现,,可能是记录错误,删除 #删除通过条件判断删除 queryser=df.loc[:,'销售数量']>0 #设置查询条件 print('删除异常值之前',df.shape) df= df.loc[queryser,:] #条件的应用 print('删除异常值之后',df.shape) ## 构建模型 #### 计算第一个指标,月均消费次数=总消费次数/月份数,,,,如果同一天所有消费算一次同一个人,销售时间和社区卡号 kpi_df = df.drop_duplicates( subset=['销售时间','社区卡号'] ) #删除重复的数据 totali = kpi_df.shape[0] #总消费的次数,,,总共的行数 print('消费次数:',totali) # In[] # ----------------------------------------------------------------------- # 北京出租车计价: # 收费标准: # 3公里以内收费13元 # 基本单价: 2.3元 / 公里(超出3公里以外) # 空驶费: 超过15公里后,每公里加收单价的50 % 的空驶费(即3.45元 / 公里) # 要求:输入公里数,打印出费用金额(以元为单位四舍五入) km = int(input("请输入公里数:")) money=0 def juli(km): if km>=0 and km <=3: print("你需要支付:13元") elif km>3 and km <=15: feiyong =13+2.3*(km-3) print("你需要支付:",feiyong) else: feiyong = 13+2.3*(km-3)+2.3*0.5*(km-15) print("你需要支付:",feiyong) juli(km) # In[] # ------------------------------------------------------------- # 2. 输入一个学生的三科成绩(三个整数): # 打印出最高分是多少? # 打印出最低分是多少? # 打印出平均分是多少? import numpy as np a = float(input("请输入第一科成绩:")) b = float(input("请输入第二科成绩:")) c = float(input("请输入第三科成绩:")) x=max(a,b,c) print("最高成绩是:",x) y=min(a,b,c) print("最低成绩是:",y) m = np.average(np.array([a,b,c])) print("平均分是: ",m) zuida = a #假设A最大 if b>zuida: zuida = b if c>zuida: zuida=c print(zuida) # In[] # ---------------------------------------------------------------- # 3、 BMI指数(Body Mass Index) 以称身体质量指数 # BMI值计算公式: # BMI = 体重(公斤) / 身高的平方(米) # 例如: # 一个人69公斤,身高是173公分 # BMI = 69 / 1.73**2 = 23.05 # 标准表: # BMI < 18.5 体重过轻 # 18.5 <= BMI < 24 体重正常 # BMI > 24 体重过重 # 要求: 输入身高的体重,打印出BMI的值并打印体重状况 for i in range(3): x = float(input("请输入身高(米):")) y = float(input("请输入体重(公斤):")) BMI = y/(x**2) print("BMI指数为:",BMI) if BMI<18.5 and BMI>0: print("体重过轻") elif BMI>=18.5 and BMI<=24: print("体重正常") elif BMI>24: print("体重过重") else: print("你的输入有误") # In[] # ---------------------------------------------------------- # 2. 输入一年中的月份(1~12) 输出这个月在哪儿 # 个季度,如果输入的是其它数,则提示您输错了 # 函数形式 def time(a): if a >=1 and a <= 12: if a <=3: print("春季") elif a <=6: print("夏季") elif a <=9: print("秋季") else: print("冬季") else: print("你输入有误:") return a time(2) # for 循环写出 for i in range(3): a = int(input("请输入月份:")) if a >=1 and a <= 12: if a <=3: print("春季") elif a <=6: print("夏季") elif a <=9: print("秋季") else: print("冬季") else: print("你输入有误:") # In[] # ------------------------------------------------------------------ # 3. 分三次输入当前的小时,分钟和秒数,在终端 # 打印时此距离凌晨0:0:0 秒过了多少秒 # 函数解析 def fun1(xiaoshi,fenzhong,miaoshu): s = xiaoshi*60*60+fenzhong*60+miaoshu print("你现在距离0:0:0经过了",s,"秒") fun1(2,30,4) # for循环解析 xiaoshi = int(input("请输入小时:")) fenzhong = int(input("请输入分钟:")) miaoshu = int(input("请输入秒数:")) s = xiaoshi*60*60+fenzhong*60+miaoshu print("你现在距离0:0:0经过了",s,"秒") # In[] # ----------------------------------------------------- # 2. 输入任意一个字符串,判断这个字符串是否是回文 # 回文示例: # 上海自来水来自海上 # ABCCBA # 12321 # (回文是指中心对称的文字) # --------------------------------------------------- for i in range(3): # 控制下面这段代码的执行次数,目前为连续执行三次 s = input("请输入文字: ") # 反转字符串s r = s[::-1] ##将数据转换,例如:s=123789 r=987321 if s == r: print(s, "是回文") else: print(s, "不是回文") # In[] # ------------------------------------------------ # 题目:有1题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数? # 都是多少?、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? L = [] for i in range(1,5): for j in range(1,5): for k in range(1,5): if (i!=j) and (i!=k) and (j!=k): s = "{}{}{}".format(i,j,k) # s = "%d%d%d"%(i,j,k) L.append(int(s)) print(L) print("总共组成了%d种"%len(L)) # In[] # --------------------------------------------------------- # 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10% # ;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分, # 可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分, # 可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成, # 从键盘输入当月利润I,求应发放奖金总数? jianjing1 = 100000*0.01 jianjing2 = jianjing1+100000*0.075 jianjing3 = jianjing2+200000*0.05 jianjing4 = jianjing3+200000*0.03 jianjing5 = jianjing4+400000*0.015 x=0 while x<3: lirun = int(input("请输入本月利润:")) if lirun <= 100000: jianjing=lirun*0.01 print('奖金为', jianjing,'元') break elif lirun<=200000: jianjing = jianjing1+(lirun-100000)*0.075 print('奖金为', jianjing,'元') break elif lirun<=400000: jianjing = jianjing2+(lirun-200000)*0.05 print('奖金为', jianjing,'元') break elif lirun<=600000: jianjing = jianjing3+(lirun-400000)*0.03 print('奖金为', jianjing,'元') break elif lirun<=1000000: jianjing = jianjing4+(lirun-600000)*0.015 print('奖金为', jianjing,'元') break elif lirun>1000000: jianjing = jianjing5+(lirun-1000000)*0.01 print('奖金为', jianjing,'元') break else: print('你的输入有误,请重新输入。。。') x = x + 1 # In[] # -------------------------------------------------------------------------------------------------------------- # 题目:一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数, # 请问该数是多少?如果一个正整数 a 是某一个整数 b 的平方,那么这个正整数 a # 叫做完全平方数。零也可称为完全平方数。 # main() # { # long int i,x,y,z; # for (i=1;i<100000;i++): # {x=sqrt(i+100); /*x为加上100后开方后的结果*/ # y=sqrt(i+268); /*y为再加上268后开方后的结果*/ # if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ # printf(" %ld ",i); /* 是换行的意思,%ld是长整型*/ # } # } import math for i in range(10000): #转化为整型值 x = int(math.sqrt(i + 100)) y = int(math.sqrt(i + 268)) if(x * x == i + 100) and (y * y == i + 268): print(i) # In[] # ------------------------------------------------------------------------------------------------------------- # 题目:输入某年某月某日,判断这一天是这一年的第几天? year = int(input('请输入年份: ')) month = int(input('请输入月份: ')) day = int(input('请输入天: ')) # 分别为每年一月至十一月的天数相加和,因为进入12月开始就按天加,所以此处没有加至12月,只加到了11月末 # 此部分为按月累加 months = (0,31,59,90,120,151,181,212,243,273,304,334) if 0 <= month <= 12: sum = months[month - 1] else: print ('data error') # 加天数 sum += day # /*sum = sum + day*/ leap = 0 if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): leap = 1 if (leap == 1) and (month > 2): sum += 1 print ('距离本年初已经经过%d天' % sum) # In[] # -------------------------------------------------------------------------------------------------------- # 写出九九乘法表的效果 for m in range(1,10): for n in range(1,10): if m>=n: # 控制跳转行的,当m>n时进入m的下一次循环,,为了呈现出下三角的形状 print('%s×%s=%s'%(n,m,m*n),end=' ') # end = ' ' 表示去除自动换行,让数据呈现一行 其中的%s为占位符,表示将得到值插入所占的位置 print() # 让for n in range(1,10) 循环一次结束换行一次 i = 1 while i <= 9: #控制行的循环 j = 1 while j <=i: # 控制列的循环 print("{}*{}={}".format(j,i,j*i),end=' ') j += 1 i += 1 print('') # In[] # --------------------------------------------------------------------------- # 1到100求和 x = 0 for i in range(1,101): x = x+1 # 第二种方法 sum(range(1,101)) # In[] # ------------------------------------------------------------------ # 用代码实现,输入三个值使得从小到大的顺序输出 # ------------------------------------------------------------------- data = [] for i in range(1,4): # 控制循环的次数,使得你有三次输入的机会 x = int(input('请输入第%d个数值: '%(i))) data.append(x) # 将输入的值存放到建立好的列表中 data.sort() # 对列表的数据进行从小大打的排序 print(data) # In[] # ---------------------------------------------------------- # 用*打印出来一个P的形状 # ---------------------------------------------------------- print ('*' * 10) for i in range(5): print ('* *') print ('*' * 10) print ('* ' * 6) # In[] # ------------------------------------------------------------------- #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, # 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每 # 个月的兔子总数为多少? # ------------------------------------------------------------------- f1 = 1 f2 = 1 for i in range(1,13): print ('%12d %12d' % (f1,f2)) if (i % 2) == 0: print (' ') f1 = f1 + f2 f2 = f1 + f2 # In[] # ------------------------------------------------------- # 计算在101到201之间有多少个素数 h = 0 leap = 1 from math import sqrt for m in range(101,201): k = int(sqrt(m + 1)) for i in range(2,k + 1): if m % i == 0: leap = 0 break if leap == 1: print ('%-4d' % m) h += 1 if h % 10 == 0: print (' ') leap = 1 print ('素数有 %d 个' % h) # In[] # --------------------------------- # 创建列表将最大值所对应的索引打印出来 # ---------------------------------- import numpy as np a = [2,4,7,10,10,10,12,12,14,15] x = np.argmax(a) # In[] """ 输入M和N计算C(M,N) """ m = int(input('m = ')) n = int(input('n = ')) fm = 1 for num in range(1, m + 1): fm =fm * num fn = 1 for num in range(1, n + 1): fn = fn * num fmn = 1 for num in range(1, m - n + 1): fmn = fmn * num print() print(fm // fn // fmn) # 计算 C(m,n) print(fm//fmn) # 计算 A(m,n) # In[] # 编函数实现阶乘的计算 def f(num): chushi = 1 for num in range(1,num+1): chushi = chushi * num print(chushi) from math import factorial factorial(5) # In[] # ---------------------------------------------------------- # 计算出列表中的每一个元素所出现的次数 # ----------------------------------------------------------- list1 = [1,2.1,1,3,2.1,1,2.1,2.1] set1 = set(list1) # 集合有元素不允许出现重复值,则将列表转换为集合有去重的效果 for item in set1: # 取出集合中的每一个元素 # 对列表中的每一个数进行遍历计数 print(str(item) , ":" , str(list1.count(item)) , "次") # print(str(item) + ":" + str(list1.count(item)) + "次") # 加号和逗号的效果一样 # --------------------------------------------------------- # 函数的递归 # ---------------------------------------------------------- def shuju(n): # 函数定义 if n == 1: return 1 else: return 2*shuju(n-1) # 进行递归,第一次传输为4--f(3);3--f(2);2--f(1)然后f(2)=2往回传输 # ---------------------------------------------------------------- # numpy模块学习 # ----------------------------------------------------------------- import numpy as np t1 = np.arange(12) t1 t1.shape t2 = np.array([[1,2,3],[4,5,6]]) t2 t2.shape # In[] # 输入你的年龄,输出你出生年 import time a = int(input("请输入你的年龄:")) def fun(a): b = time.strftime('%Y',time.localtime(time.time())) c = int(b) age = c-a print("你的出生年是:%d年"% age) fun(a) # In[] # 输入三个整数,输出最大值和最小值 def zz(a,b,c): a = int(input("请输入一个整数:")) b = int(input("请输入一个整数:")) c = int(input("请输入一个整数:")) L = [a,b,c] print("最大值是:",max(L)) print("最小值是:",min(L)) return L zz(123,23,23) # In[] # 编写函数,输入三个点的坐标,判断是否能构成三角形,如果能并计算前两个点所在的直线方程 def san(x1, y1, x2, y2, x3, y3): c = float(((x1-x2)**2+(y1-y2)**2)**0.5) m = float(((x1-x3)**2+(y1-y3)**2)**0.5) n = float(((x3-x2)**2+(y3-y2)**2)**0.5) if (c+m)>n and (a+n)>m and (m+n)>c: if x1 == x2: print("直线的方程为: y = x") else: k = (y2-y1)/(x2-x1) print("直线的方程为:y={}x+b".format(k)) print("三点能构成三角形") else: print("不能构成三角形") # In[] # 输入两个点的坐标,计算所构成的直线方程 x1 = float(input("请输入第一个点的横坐标:")) y1 = float(input("请输入第一个点的纵坐标:")) x2 = float(input("请输入第二个点的横坐标:")) y2 = float(input("请输入第二个点的纵坐标:")) def line(x1,y1,x2,y2): if x1 == x2: print("直线的方程为: x = {}".format(x1)) elif y1 == y2: print("直线方程为: y = {}".format(y1)) else: k = (y2-y1)/(x2-x1) b = y1-k*x1 print("直线的方程为:y=%s x + (%s)"%(k,b)) line(x1, y1, x2, y2) # In[] # 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分 # 之间的用B表示,60分以下的用C表示。 a = float(input("请输入你的成绩:")) if a >= 90 : print('你的成绩为:%d'%a) print('你的等级是:A') elif a > 60 and a<89: print('你的成绩为:%d'%a) print('你的等级是:B') else: print('你的成绩为:%d'%a) print('你的等级是:B') # In[] # 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 s = input('input a string:') 字母 = 0 空格 = 0 数字 = 0 字符 = 0 for c in s: if c.isalpha(): # 如果有字母存在,则返回1,否则返回0 字母 += 1 elif c.isspace(): # 如果有空格存在则返回1 ,否则返回0 空格 += 1 elif c.isdigit(): # 如果有数字 1 否则 0 数字 += 1 else: 字符 += 1 print ('字母 = %d,空格 = %d,数字 = %d,字符 = %d' % (字母,空格,数字,字符)) # In[] # 写程序,创建用户名,如果存在输出用户名已经存在,如果不存在输出注册成功,,, # 并将注册成功的用户名存入原来的列表中,,总共有两次注册的机会 current_users = ['sas','python','tablue','power','Excel'] for i in range(2): 用户名 = input("请输入用户名:") a = [user.lower() for user in current_users] if 用户名.lower() in a: print("该用户名已经被使用") print() print("如下用户名已经被注册:",current_users) else: print("注册成功") current_users.append(用户名) # In[] salary=int(input("请输入您的工资:")) #提示输入工资 buy_ed_list = [] # 把已经买的东西记录到这个列表里 goods_information=''' ----------------------------------------------商品清单---------------------------------------- serial_number : name: price: 1 iphone6s 5800 2 mac book 9000 3 coffee 32 4 python book 80 5 bicyle 1500 ---------------------------------------------------------------------------------------------- '''#商品的信息,包括编号、名称、价格 if salary<32: print('对不起,您的余额已不足!') else: print(goods_information)#输出商品信息,供客人查看 goods_list=[0,'iphone6s','mac book','coffee','python book','bicyle']#商品列表 price_list=[0,5800,9000,32,80,1500]#商品价格列表 for i in range(1,6): buy = int(input('请输入您要想买的商品序号:')) if salary-price_list[buy]>=0:#判断工资是否能买的起所选商品 print(goods_list[buy]+'已加入购物车') buy_ed_list.append(goods_list[buy])#把成功加入购物车的商品加入已购列表 print('您的余额为:',salary-price_list[buy]) salary = salary - price_list[buy] consider=input('是否继续购买【购买输入y】:') if consider=='y':#如果是就继续购买 i+=1 continue else : print('谢谢您的光顾!') print("以下是您已购买的商品清单:",buy_ed_list)#打印已购清单 else : print('对不起,您的余额已不足!') break # In[] 用户名 = input("请输入用户名:") current_users = ['sas','python','tablue','power','Excel'] for i in range(2): a = [user.lower() for user in current_users] if 用户名.lower() in a: print("该用户名已经被使用") else: print("注册成功") current_users.append(用户名) break print(current_users) # In[] import pandas as pd import numpy as np df = pd.read_csv(r"C:UsersAdministratorpycodePython数据清洗课件 (9.6、9.9-9.12)pandasEuro2012_stats.csv") # 提取其中的Goals列 df.Goals df.shape[0] # 查看数据有多少行 df.info() # 查看数据集每一列的信息 # 将数据集中的列Team, Yellow Cards和Red Cards单独存为一个名叫discipline的数据框 discipline = df[['Team','Yellow Cards','Red Cards']] # 步骤8 对数据框discipline按照先Red Cards再Yellow Cards进行排序,并降序排列 discipline.sort_values(["Red Cards","Yellow Cards"],ascending = False) # 计算所有球队拿到的黄牌数的平均值 round(df['Yellow Cards'].mean()) # round 向下取整数。 # 找到进球数Goals超过6的球队数据 df[df['Goals']>6] # 选取以字母G开头的球队数据 df[df['Team'].str.startswith('G')] # 字符串中首字母 # 选取前7列¶ df.iloc[:,0:7] # 选取除了最后3列之外的全部列 df.iloc[:,:-3] # In[]