如何将带有列表列的pandas dataframe保存到SQLite数据库中?
如何将带有列表列的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中?
如何将包含列表列的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数据库的问题。