python错误类型翻译_错误“'时间戳记'对象没有属性'翻译'”

在尝试使用pandas_datareader从Yahoo获取数据并插入数据库时遇到问题,'Timestamp'对象没有属性'translate'。解决方案是将日期时间列转换为字符串格式,并使用DataFrame.to_numpy().tolist()进行数据插入。
摘要由CSDN通过智能技术生成

最近,我开始进行股票价格分析,以优化我的投资组合。我从一个Excel文件和几个VBA宏开始。它工作得很好,但是非常慢。因此,我现在正尝试在服务器上建立并建立适当的“股票价格”数据库(基于此帖子)。

在“ stock_prices”数据库中,有一个“ daily_price”表,用于存储某些行情的每日股票价格。为了更新“每日价格”表,每天都会启动python脚本,其中包括以下Python / SQL语句。

df = pdr.get_data_yahoo(ticker, start_date)

for row in df.itertuples():

values = [YAHOO_VENDOR_ID, ticker_index[ticker]] + list(row)

cursor.execute("INSERT INTO daily_price (data_vendor_id, ticker_id, price_date, open_price, high_price, low_price, close_price, adj_close_price, volume) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", tuple(values))

不幸的是,“ cursor.execute ...”行返回以下错误:“ AttributeError:“ Timestamp”对象没有属性“ translate””

“值”元组的打印输出是:[1、2,时间戳('2004-08-19 00:00:00'),49.81328582763672、51.83570861816406、47.80083084106445、49.9826545715332、49.9826545715332、44871300]

根据我在另一篇类似的文章中可以读到的内容,我检查了日期索引的类型以确保它不是对象:

Print(df.index.dtype)

这将返回看起来不错的“ datetime64 [ns]”。

最后,在数据库中,我尝试将数据类型从“日期”更改为“日期时间”,但这不能解决错误。

任何人都可以分享一些有关如何解决此错误的提示吗?

最好的祝福,

于25/04/2020编辑:最终解决方案

df = pdr.get_data_yahoo(ticker, start_date)

df = df.reset_index()

df.columns = ['price_date', 'open_price', 'high_price', 'low_price', 'close_price', 'adj_close_price', 'volume']

df['data_vendor_id'] = YAHOO_VENDOR_ID

df['ticker_id'] = ticker_index[ticker]

df = df[['data_vendor_id','ticker_id','price_date', 'open_price', 'high_price', 'low_price', 'close_price', 'adj_close_price', 'volume']]

df['price_date'] = df['price_date'].dt.strftime('%Y-%m-%d %H:%M:%S')

print(df)

cursor.executemany("INSERT INTO daily_price (data_vendor_id, ticker_id, price_date, open_price, high_price, low_price, close_price, adj_close_price, volume) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", df.to_numpy().tolist())

解决方案

考虑将您的日期时间列转换为时间的字符串表示形式,并使用DataFrame.to_numpy()而不是iterrows方法:

df = pdr.get_data_yahoo(ticker, start_date)

# ADD NEW COLUMNS

df["data_vendor_id"] = YAHOO_VENDOR_ID

df["ticker_id"] = ticker_index[ticker]]

# CONVERT DATE TO STRING TIME

df["DATE"] = df["DATE"].dt.strftime('%Y-%m-%d %H:%M:%S')

sql = '''INSERT INTO daily_price (data_vendor_id, ticker_id, price_date,

open_price, high_price, low_price,

close_price, adj_close_price, volume)

VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)

'''

# LIST

cursor.executemany(sql, df.to_numpy().tolist())

conn.commit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值