大数据技术(第6节实验课-----pandas之表格的合并,缺失数据填补)

第1题 P134 按照任务5.1的要求

要求将detail表和order表,按照 detail.order_id和order.info_id主键合并,
求合并后数据 最后20行,所有数字之和(不包括index),并且提交到ftp://125.220.74.10
时间不加,文件名中的数字不加。

import pandas as pd
import numpy as np
import sqlalchemy


order=pd.read_csv(r"G:\大数据实验数据库\3.大数据实验数据\meal_order_info.csv",encoding="GBK")
conn=sqlalchemy.create_engine(r"sqlite:///G:\大数据实验数据库\3.大数据实验数据\test.db")
detail=pd.read_sql_table("meal_order_detail1",conn)

order["info_id"]=order["info_id"].astype("str")
x1=pd.merge(detail,order,left_on="order_id",right_on="info_id") #合并

sum1=0
for i in range(0,x1.shape[1]):     #列
    for j in range(2779-20,2779): #行
        #print(x1.iloc[j,i],type(x1.iloc[j,i]))
        tt=str(x1.iloc[j,i])   #将每一列的数据转换为字符串
        if tt.isdigit():   #判断是否为数字字符
            sum1+=int(tt)  
print("合并后数据 最后20行,所有数字之和",sum1)

第2题 P150面 任务5.2清洗数据之异常值

按照3o原则,判断detail[‘counts’]的异常值,找到倒数第3个异常值index是多少?
将这个数字提交到第二行 提交服务器地址为:并且提交到ftp://125.220.74.10

方法1

import pandas as pd
import numpy as np

detail=pd.read_csv(r"G:\大数据实验数据库\3.大数据实验数据\detail.csv",encoding="GBK")
def outRange(Ser1):
    boolInd=(Ser1.mean()-3*Ser1.std()>Ser1) | (Ser1.mean()+3*Ser1.var()<Ser1)  #列的条件限制
    index=np.arange(Ser1.shape[0])[boolInd]   #符合条件的表格数据
    outrange=Ser1.iloc[index]      #获取对应的行列
    return outrange

outlier=outRange(detail["counts"])
print("倒数第3个异常值index以及异常值为",outlier.iloc[outlier.shape[0]-3:outlier.shape[0]-2][:])

方法2

import pandas as pd
import numpy as np

detail=pd.read_csv(r"G:\大数据实验数据库\3.大数据实验数据\detail.csv",encoding="GBK")
ser1=detail["counts"]
serlb=(ser1.mean()-3*ser1.std()>ser1)|(ser1.mean()+3*ser1.std()>ser1)

list1=[]
for i in range(detail.shape[0]):
    if serlb[i]==0:   #将不满足条件的数打印出来
        list1.append(i)
print("倒数第3个异常值index是",list1[-3])    

第3题 P164 实训1

电量数据缺失值,求最后一个拉格朗日插入的数值为多少?
作为第三题的数据提交到第3行。

import math
import pandas as pd
import numpy as np
from scipy.interpolate import lagrange


#取每一列的前两个数进行构造拉格朗函数
x=[0,1]
y0=[236.2708,238.0521]
y1=[325.6379,328.0897]
y2=[515.4564,514.8900]

f0=lagrange(x,y0)
f1=lagrange(x,y1)
f2=lagrange(x,y2)


t=pd.read_csv(r"G:\大数据实验数据库\4.Python数据分析与应用\第5章\实训数据\missing_data.csv",encoding="GBK")
print("插入前的数据\n\n",t)

list1=[]

for i in range(t.shape[0]):
    for j in range(t.shape[1]):
        if math.isnan(t.iloc[i,j]):  #遍历全表,判断是否为Nan 不同的列调用不同的拉格朗函数
            if j==0:
                t.iloc[i,j]=f0(i)
                list1.append(t.iloc[i,j])
            elif j==1:
                t.iloc[i,j]=f1(i)
                list1.append(t.iloc[i,j])
            else:
                t.iloc[i,j]=f2(i)
                list1.append(t.iloc[i,j])
            
print("插入后的数据\n\n",t)
print("\n插入数据列表为",list1)
print("\n最后一个插入数值为%.4f"%list1[-1])

第4题 P164 实训2

提交数据为 合并后最后一行的所有数字之和,不包括index.提交数据作为第4行

import pandas as pd
import numpy as np

ele_loss=pd.read_csv(r"G:\大数据实验数据库\4.Python数据分析与应用\第5章\实训数据\ele_loss.csv",encoding="GBK")
alarm=pd.read_csv(r"G:\大数据实验数据库\4.Python数据分析与应用\第5章\实训数据\alarm.csv",encoding="GBK")
print(ele_loss.shape)
print(alarm.shape)
data=pd.merge(ele_loss,alarm,left_on=("ID","date"),right_on=("ID","date"))  #主键组合并
print("合并后的表格为")
print(data)

sum1=0

for i in range(0,data.shape[1]):     
    for j in range(6-1,6): 
        tt=data.iloc[j,i]  
        if  isinstance(tt,float):
            sum1+=tt  
        elif str(tt).isdigit():
            sum1+=tt
print("\n合并后,最后1行数字和为",sum1)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值