如何将带有列表列的pandas dataframe保存到SQLite数据库中?

6 浏览
0 Comments

如何将带有列表列的pandas dataframe保存到SQLite数据库中?

我有以下的pandas数据帧:

tmp=pd.DataFrame({'test':['aaa','bb','cccc'],
                  'date':['2019-05-16 05:59:36','2020-05-16 05:59:36','2021-05-16 05:59:36'],
                  'arr':[['a','b','c'],['q','ww','dd'],['dsaa','daaaa','13-dasdas']]})
tmp.date=tmp.date.astype('datetime64')

我试图将其保存到SQLite数据库中:

import sqlite3
database = "./tmp.sqlite"
conn = sqlite3.connect(database)
tmp.to_sql('tmp', con=conn,if_exists='replace')
conn.close()

但是得到了一个错误:"Error binding parameter 3 - probably unsupported type.",如何更好地保存"arr"列到SQLite中?

0
0 Comments

如何将包含列表列的pandas dataframe保存到SQLite数据库?

问题原因:

- SQLite数据库不支持直接存储包含列表的复杂Python数据类型。

解决方法:

1. 将整个表达式转换为字符串,并将字符串简单地存储在SQLite中。然后检索它并使用eval()函数重新填充复杂的Python数据类型。

- 示例代码:

a={'test':['aaa','bb','cccc'],
   'date':['2019-05-16 05:59:36','2020-05-16 05:59:36','2021-05-16 05:59:36'],
   'arr':[['a','b','c'],['q','ww','dd'],['dsaa','daaaa','13-dasdas']]}
s=str(a)
s
# 输出结果:
# "{'test': ['aaa', 'bb', 'cccc'], 'date': ['2019-05-16 05:59:36', '2020-05-16 05:59:36', '2021-05-16 05:59:36'], 'arr': [['a', 'b', 'c'], ['q', 'ww', 'dd'], ['dsaa', 'daaaa', '13-dasdas']]}"
eval(s)
# 输出结果:
# {'test': ['aaa', 'bb', 'cccc'], 'date': ['2019-05-16 05:59:36', '2020-05-16 05:59:36', '2021-05-16 05:59:36'], 'arr': [['a', 'b', 'c'], ['q', 'ww', 'dd'], ['dsaa', 'daaaa', '13-dasdas']]}

2. 使用pickle()函数而不是SQLite。

- 示例代码:

import pickle
# 保存DataFrame到pickle文件
df.to_pickle('dataframe.pkl')
# 从pickle文件加载DataFrame
df = pd.read_pickle('dataframe.pkl')

通过以上两种方法,我们可以解决将包含列表列的pandas dataframe保存到SQLite数据库的问题。

0