Python 完成函数以填充缺少的值
嗨,我目前正在尝试完成这个Python3.x实践练习。我需要完成该函数以查找缺少的值并替换它们。我想我可以用线性回归来填充缺失的值 解决了我在重塑时遇到的错误 已解决错误I为“ValueError:无法将字符串转换为浮点:‘3/13/2012 16:00:00’” -问题-我让函数工作并输出一个输出,但我只得到所有预期输出的相同值 如果有更好的办法,我洗耳恭听。提前谢谢 问题 为您提供了河流中汞含量的每日读数时间序列。在每个测试用例中,在某些天内缺少当天的最高级别。通过分析数据,试图找出那些日子里缺少的汞含量。每行数据包含两个选项卡分隔的值:时间戳和当天的最高读数 每个输入文件中正好有二十行标记为缺少。缺失值标记为“缺失值1”、“缺失值2”、“缺失值20”。这些丢失的记录已随机分散在数据行中 约束 汞含量均<400 功能描述 在下面的编辑器中完成calcMissing函数。它应该打印20行,每个缺少的值对应一行,作为浮动Python 完成函数以填充缺少的值,python,pandas,linear-regression,missing-data,Python,Pandas,Linear Regression,Missing Data,嗨,我目前正在尝试完成这个Python3.x实践练习。我需要完成该函数以查找缺少的值并替换它们。我想我可以用线性回归来填充缺失的值 解决了我在重塑时遇到的错误 已解决错误I为“ValueError:无法将字符串转换为浮点:‘3/13/2012 16:00:00’” -问题-我让函数工作并输出一个输出,但我只得到所有预期输出的相同值 如果有更好的办法,我洗耳恭听。提前谢谢 问题 为您提供了河流中汞含量的每日读数时间序列。在每个测试用例中,在某些天内缺少当天的最高级别。通过分析数据,试图找出那些日
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)