我试图将回归的结果写回MySQL,但是在迭代拟合值和让nan写为空值时遇到了问题。最初,我是这样做的:
for i in dataframe:
cur = cnx.cursor()
query = ("UPDATE Regression_Data.Input SET FITTEDVALUES="+(dataframe['yhat'].__str__())+" where timecount="+(datafrane['timecount'].__str__())+";")
cur.execute(query)
cnx.commit()
cur.close()
……我的回答是:
^{pr2}$所以,我一直试图过滤掉NaN,只在yhat不等于NaN时请求Python提交:
for i in dataframe:
if cleandf['yhat']>(-1000):
cur = cnx.cursor()
query = ("UPDATE Regression_Data.Input SET FITTEDVALUES="+(dataframe['yhat'].__str__())+" where timecount="+(datafrane['timecount'].__str__())+";")
cur.execute(query)
cnx.commit()
cur.close()
但我得到的是:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
所以,我试着用上面的语法来解决这个问题:
if cleandf['yhat'][i]>(-1000):
但你要知道:
ValueError: Can only tuple-index with a MultiIndex
然后尝试将ITEROWS()添加到这两个文件中,如:
for i in dataframe.iterrows():
if cleandf['yhat'][i]>(-1000):
但也有同样的问题。在
我不确定我在这里做错了什么,但假设这是在Pandas数据帧中迭代的结果。但是,即使迭代是正确的,我也希望在出现NaN的SQL中写入null。在
你觉得我该怎么做?在
我没有一个完整的答案,但也许我有一些建议可以帮助你。我相信您认为您的
dataframe
是一个类似于SQL记录集的对象。在这将迭代dataframe中的列名字符串。
^{pr2}$i
将采用列名,而不是行。在这将返回整列(
pandas.Series
,它是numpy.ndarray
),而不是单个值。因此:将给出整个列的字符串表示形式,这对人类阅读很有用。它当然不是一个可以转换为字符串的查询值。在
这会产生一个错误,因为
cleandf['yhat']
是一个完整的值数组,而不仅仅是一个值。把它看作一个完整的列,而不是一行中的值。在这一点越来越接近,但您确实希望
i
在这里是一个整数,而不是另一个列名。在使用
iterrows
似乎是对的。但是,i
接受每一行的值,而不是可以索引到列中的整数(cleandf['yhat']
是一个完整的列)。在另外,请注意熊猫有更好的方法来检查丢失的值,而不是依赖一个巨大的负数。试试这样的方法:
我想你可以比我更好地实现
execute_my_query
。然而,这个解决方案并不是您想要的。您确实希望遍历所有行并执行两种类型的插入。试试这个:希望有帮助。在
相关问题 更多 >
编程相关推荐