Я пытаюсь вставить данные из DataFrame от pandas в таблицу PostgreSQL,
таблица, которую пытается вставить выглядит:
city_id date forecast
5 29.05.2019 0
1 29.05.2019 0
151 29.05.2019 0
55 29.05.2019 0
...
типы:
city_id
- numpy.int64
date
- datetime.date
forecast
- numpy.int64
И блок кода , который вставляет данные в БД:
with psycopg2.connect(f"host='{hostname}' \
dbname='{database}' \
user='{username}' \
password='{password}'") as connection:
with connection.cursor() as cursor:
connection.set_client_encoding('UTF8')
for i in df_with_new_one.index:
date = df_with_new_one['date'][i]
city_id = df_with_new_one['city_id'][i]
value = df_with_new_one['forecast'][i]
cursor.execute("INSERT INTO forecast \
(city_id, computed_time, date, value) \
VALUES (%s, %s, %s, %s)", (city_id, now, date, value))
Где now
- время, сохраненное как datetime.datetime.now()
И я получаю ProgrammingError :
ProgrammingError: can't adapt type 'numpy.int64'
Я проверил Тип type(df_with_new_one['forecast'][0])
Тип numpy.int64
Итак, я понял, что PostreSQL может читать только pythonic int
и float
, и первое, что я попробовал, было преобразование np.int64
в простые int
с:
tolist()
pd.to_numeric()
int()
для ((int(city_id), now, date, int(value))
.astype(int)
.value.astype('int')
Upd:.
city_id = int(df_with_new_one['city_id'][i])
value = int(df_with_new_one['forecast'][i])
К сожалению ни один из них не работает для меня
Когда я пытался int()
я получаю еще одну ошибку:
TypeError: cannot convert the series to <class 'int'>
Ответы, которые я нашел , но никто из них мне не помог:
Существуют ли какие-либо другие методы для изменения типа значений?