错误"'时间戳'对象没有属性'翻译'"

最近,我开始研究股票价格分析,以优化我的投资组合。我开始用一个Excel文件和几个VBA宏。它的工作相当不错,但速度很慢。所以,我现在正试图在我的服务器上建立一个合适的 “股票价格 “数据库(据此).

在 “stock_prices “数据库中,有一个 “daily_price “表,存储了一些股票的每日价格。为了更新 “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’ object has no attribute ‘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]”,看起来不错。

最后,在数据库中,我试着将数据类型从 “Date “改为 “Datetime”,但这并不能解决这个错误。

谁能分享一些关于如何解决这个错误的提示?

最佳的问候。

编辑于25042020 。最终解决方案

            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()

给TA打赏
共{{data.count}}人
人已打赏
未分类

为什么当第一个clean_<field_name>引发ValidationError时,form.is_valid()没有立即返回false?

2022-9-10 10:05:20

未分类

在Leaflet地图上放一个GeoJSON。Invalid GeoJSON object. throw new Error('Invalid GeoJSON object.');

2022-9-10 10:05:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索