У меня есть фрейм данных с dtypes, показанным ниже, и я хочу вставить фрейм данных в базу данных postgres, но это не удается из-за ошибки невозможно адаптировать тип 'numpy.int64'
id_code int64
sector object
created_date float64
updated_date float64
Как я могу преобразовать эти типы в нативные типы Python, такие как int64 (который по сути является «numpy.int64»), в классический int, который затем будет приемлем для postgres через клиента psycopg2.
data['id_code'].astype(np.int) defaults to int64
Тем не менее возможно преобразование из одного типа numpy в другой (например, из int в float)
data['id_code'].astype(float)
изменяется на
dtype: float64
Нижняя линиязаключается в том, что psycopg2, похоже, не понимает тип данных numpy, если у кого-то есть идеи, как преобразовать их в классические типы, что было бы полезно.
Обновлено: вставка в DB
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()