gpt4 book ai didi

numpy - psycopg2:无法适应类型 'numpy.int64'

转载 作者:行者123 更新时间:2023-12-04 01:25:30 25 4
gpt4 key购买 nike

我有一个数据框的 dtypes 如下所示,我想将数据框插入到 postgres 数据库中,但由于错误 而失败无法适应类型“numpy.int64”

id_code               int64
sector object
created_date float64
updated_date float64

如何将这些类型转换为原生 python 类型,例如从 int64(本质上是“numpy.int64”)到经典 int,然后通过 psycopg2 客户端可以接受 postgres。
data['id_code'].astype(np.int)  defaults to int64

尽管如此,还是可以从一种 numpy 类型转换为另一种类型(例如从 int 到 float)
data['id_code'].astype(float)

更改为
dtype: float64

底线是 psycopg2 似乎不理解 numpy 数据类型,如果有人有想法如何将它们转换为有帮助的经典类型。

更新:插入数据库
def insert_many():
"""Add data to the table."""
sql_query = """INSERT INTO classification(
id_code, sector, created_date, updated_date)
VALUES (%s, %s, %s, %s);"""
data = pd.read_excel(fh, sheet_name=sheetname)
data_list = list(data.to_records())

conn = None
try:
conn = psycopg2.connect(db)
cur = conn.cursor()
cur.executemany(sql_query, data_list)
conn.commit()
cur.close()
except(Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()

最佳答案

同样的问题,在我将系列转换为 nd.array 和 int 后成功解决了这个问题。

你可以尝试如下:

data['id_code'].values.astype(int)

——

更新:

如果值包括 NaN,它仍然是错误的。
看来psycopg2无法解释 np.int64格式,因此以下方法对我有用。
import numpy as np
from psycopg2.extensions import register_adapter, AsIs
psycopg2.extensions.register_adapter(np.int64, psycopg2._psycopg.AsIs)

关于numpy - psycopg2:无法适应类型 'numpy.int64',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50626058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com