我想要从rtrend
数据框(mydata1
)列pandas
更新MySQL表(getdata1
)中的列rtrend
,以确保值对应于适当的日期(dt
)
e.g。来自rtrend
df的2016-08-09
的{{1}}值会更新相应的MySQL getdata1
mydata1
2016-08-09
值。
另外指定特定的安全ID,例如在这种情况下rtrend
security_id == 'GS'
这会产生updateexample = update(mydata1)
.where(mydata1.c.security_id=='GS', mydata1.c.dt==getdata1['dt'])
.values(rtrend=getdata1['rtrend'])
请有人帮忙以正确的方式解决这个问题吗?
当前表和数据框的示例:
pandas dataframe'getdata1'
AttributeError: 'Series' object has no attribute 'translate'
MySQL表'mydata1'
dt | security_id | rtrend
2016-08-09 | GS | 1
2016-08-10 | GS | -1
答案 0 :(得分:1)
以下是使用上述指南的解决方案
http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.bindparam
updatecode1 = update(mydata1).
where(and_(mydata1.c.dt == bindparam('1dt'), mydata1.c.security_id == bindparam('1security_id')) ).
values({'rtrend' : bindparam('1rtrend'),'ma200' : bindparam('1ma200')})
然后循环以定义每个值并更新表
b1 = 'GS'
i = 0
for i in range(len(getdata1)):
a1 = getdata1.iloc[i]['dt']
c1 = int(getdata1.iloc[i]['rtrend'])
d1 = float(getdata1.iloc[i]['MA200'])
conn.execute(updatecode1, {'1dt' : a1, '1security_id' : b1, '1rtrend' : c1, '1ma200' : d1})
我确信这种方式可能比循环更有效,但这对我的问题起作用。
注意:在上面的'c1'和'd1'中,我使用int()和float()只是为了将数据类型与我的表匹配。