Python 完成函数以填充缺少的值

Python 完成函数以填充缺少的值,python,pandas,linear-regression,missing-data,Python,Pandas,Linear Regression,Missing Data,嗨,我目前正在尝试完成这个Python3.x实践练习。我需要完成该函数以查找缺少的值并替换它们。我想我可以用线性回归来填充缺失的值 解决了我在重塑时遇到的错误 已解决错误I为“ValueError:无法将字符串转换为浮点:‘3/13/2012 16:00:00’” -问题-我让函数工作并输出一个输出,但我只得到所有预期输出的相同值 如果有更好的办法,我洗耳恭听。提前谢谢 问题 为您提供了河流中汞含量的每日读数时间序列。在每个测试用例中,在某些天内缺少当天的最高级别。通过分析数据,试图找出那些日

嗨,我目前正在尝试完成这个Python3.x实践练习。我需要完成该函数以查找缺少的值并替换它们。我想我可以用线性回归来填充缺失的值

解决了我在重塑时遇到的错误

已解决错误I为“ValueError:无法将字符串转换为浮点:‘3/13/2012 16:00:00’”

-问题-我让函数工作并输出一个输出,但我只得到所有预期输出的相同值

如果有更好的办法,我洗耳恭听。提前谢谢

问题

为您提供了河流中汞含量的每日读数时间序列。在每个测试用例中,在某些天内缺少当天的最高级别。通过分析数据,试图找出那些日子里缺少的汞含量。每行数据包含两个选项卡分隔的值:时间戳和当天的最高读数

每个输入文件中正好有二十行标记为缺少。缺失值标记为“缺失值1”、“缺失值2”、“缺失值20”。这些丢失的记录已随机分散在数据行中

约束

汞含量均<400

功能描述

在下面的编辑器中完成calcMissing函数。它应该打印20行,每个缺少的值对应一行,作为浮动

def校准缺失(读数):
#在这里编写代码
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
读数\u count=int(输入().strip())
读数=[]
对于范围内的读数(计数):
读数\项目=输入()
阅读资料。附加(阅读资料\项目)
计算损耗(读数)
这就是我到目前为止所做的:


#!/垃圾桶/蟒蛇3
输入数学
导入操作系统
随机输入
进口稀土
导入系统
#
#完成下面的“calcMissing”功能。
#
#该函数接受字符串数组读数作为参数。
#
def calcMissing(读数):
从日期时间导入日期时间
从sklearn.linear_模型导入逻辑回归、线性回归、岭、SGD回归
从sklearn.model\u选择导入列车\u测试\u拆分
作为pd进口熊猫
将numpy作为np导入
日期=[]
温度值=[]
对于读数中的x:
临时列表=x.split('\t')
float_days=datetime.strtime(临时列表[0],“%m/%d/%Y%H:%m:%S”)
日期。追加(浮动天数)
尝试:
临时值追加(浮动(临时值列表[1]))
除:
临时值追加(np.nan)
通过
温度df=pd.系列(温度值,索引=日期)
temp_df.index.name='Date'
temp_df=temp_df.重置索引(name='temp')
缺少_temp_dates=temp_df[temp_df['temp'].isnull()]['Date'].值
missing_temp_dates=missing_temp_dates.astype('datetime64[D])。astype(int)
缺少临时日期=[[x]表示缺少临时日期中的x]
缺少临时日期=np.asarray(缺少临时日期)
temp_df=temp_df.dropna()
日期,temps=[[x]表示temp_-df['Date'].值]中的x,temp_-df['temp']值
十、 y=np.asarray(日期),np.asarray(临时)
从sklearn.employ导入梯度boosting回归器
mdl=梯度增强回归器()
mdl.fit(X,y)
y_pred=mdl.predict(缺少临时日期)
对于y_pred中的pred:
打印(pred)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
读数\u count=int(输入().strip())
读数=[]
对于范围内的读数(计数):
读数\项目=输入()
阅读资料。附加(阅读资料\项目)
计算损耗(读数)
我得到:

编译器消息

Wrong Answer
您的输出(标准输出)

预期产量

32.69
32.15
32.61
29.3
28.96
28.78
31.05
29.58
29.5
30.9
31.26
31.48
29.74
29.31
29.72
28.88
30.2
27.3
26.7
27.52

我认为set_索引行中存在错误,因为您有一列“值”和一个索引“日期”。这就是为什么DataFrame只有一列


尝试删除set_索引并检查

鉴于示例图有多嘈杂,我认为线性回归模型不会工作得太好。由于丢失的数据是随机分布的,因此可以在丢失值之前和之后一天的值之间进行简单的插值,假设这些值也没有丢失

输入中的连续值不一定相隔一天,如本测试输入所示:

12/13/2012 16:00:00 27.52
12/14/2012 16:00:00 Missing_19
12/17/2012 16:00:00 27.215
因此,在插值时,您可以根据它接近的日期对其进行加权

这个问题实际上与相同的数字相同,除了股票价格。您可以从排行榜或社论中查看解决方案

  • 此代码绝对有助于:

  • 您从错误消息中了解到了什么?你做过调试吗?请提供一个。请尝试在第行missing_series处将np.float32转换为np.datetime64感谢您花时间提供答案。!你可以:-1)编辑你的答案,这样答案就更详细了。2) 解释你想用这个答案达到什么目的,以及你想说什么。?更多信息(如何提问:)@Vamish您能在代码中添加解释作为注释吗?@Lulu在您的文字中添加注释。
    12/13/2012 16:00:00 27.52
    12/14/2012 16:00:00 Missing_19
    12/17/2012 16:00:00 27.215
    
            
    #!/bin/python3
    import math
    import os
    import random
    import re
    import sys
    
    def calcMissing(readings):
    
        import datetime as dt
    
        import pandas as pd
        import numpy as np
        import random
        dates = []
        temp_values = []
        for x in readings:
            temp_list = x.split('\t')
            dates.append(temp_list[0])
            temp_values.append(temp_list[1])
        
    
        df = pd.DataFrame(list(zip(dates,temp_values)), 
                   columns =['X', 'Y'])
        df['X'] = pd.to_datetime(df['X'])
    
        missing_indices = df.Y.str.contains('^Missing')
        missing_dates = df.X[missing_indices]
            
        b=df.index[missing_indices]
        df1 = df.drop(b)
    
        df1['Date']=df1['X'].map(dt.datetime.toordinal)
        df1['Y'] = pd.to_numeric(df1['Y'])
    
        x = df1[['Date']]
        y = np.asarray(df1['Y'])
        
        from sklearn.ensemble import GradientBoostingRegressor
        lr = GradientBoostingRegressor()
        lr.fit(x,y)
    
        
        x_test = df.X[b]
        x_test1 = x_test.map(dt.datetime.toordinal)
        y_pred = lr.predict(np.array(x_test1).reshape(-1,1))
        for p in y_pred:
            print(p)