当将数据从pandas dataframe写入PostgreSQL时,如果出现错误信息"'DataFrame'对象是可变的,因此它们不能被哈希",通常是因为pandas dataframe是可变的对象,而哈希值是不可变的。在将数据插入PostgreSQL之前,需要将dataframe转换为可哈希的数据结构,比如列表或元组。
下面是完善且全面的答案:
问题:将数据从pandas dataframe写入PostgreSQL会给出错误'DataFrame'对象是可变的,因此它们不能被哈希。
答案:这个错误通常发生在尝试将可变的pandas dataframe插入PostgreSQL时。因为哈希值是不可变的,可变对象无法进行哈希操作。为了解决这个问题,我们可以将dataframe转换为可哈希的数据结构,例如列表或元组,然后将其插入PostgreSQL。
可以使用以下步骤来解决这个问题:
data_list = df.values.tolist() # 转换为列表
data_tuples = [tuple(row) for row in df.values] # 转换为元组
import psycopg2
conn = psycopg2.connect(database="your_database", user="your_username", password="your_password", host="your_host", port="your_port")
cur = conn.cursor()
cur.executemany("INSERT INTO your_table (column1, column2, ...) VALUES (%s, %s, ...)", data_list)
或
cur.executemany("INSERT INTO your_table (column1, column2, ...) VALUES (%s, %s, ...)", data_tuples)
conn.commit()
cur.close()
conn.close()
这样,你就成功地将pandas dataframe的数据插入到PostgreSQL中了。
推荐的腾讯云相关产品:腾讯云数据库PostgreSQL
腾讯云数据库PostgreSQL是一种基于PostgreSQL社区版本的云数据库服务。它提供高可靠、高性能、高弹性、易于管理的数据库解决方案,可满足各种规模和业务需求。
产品链接地址:腾讯云数据库PostgreSQL
领取专属 10元无门槛券
手把手带您无忧上云