You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas将含列表的JSON数据拆分行写入SQLite3数据库?

问题描述

现有JSON数据格式如下:

[{"name": "foo", "attr": ["bar", "baz"]}, {...}]

该数据已能正常读取为Pandas DataFrame(Python 3.9.2,Pandas 1.5.1),但直接调用to_sql()写入SQLite3时,报错:

sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type.

原因是SQLite不支持列表类型的字段,需要把数据转换成如下规范化表格形式再写入:

name attr
foo  bar
foo  baz

求简便实现方法,同时可以调整JSON的生成格式。


解决方法

方法一:直接处理已读取的DataFrame

用Pandas自带的explode()方法就能一键展开列表字段,这是最省事的方式:

import pandas as pd
import sqlite3

# 假设df是你已经读取好的DataFrame
df = pd.read_json("your_data.json")
# 把attr列的列表拆成单独行,同时保留name列对应值
df_exploded = df.explode('attr', ignore_index=True)
# 写入SQLite
conn = sqlite3.connect('your_db.db')
df_exploded.to_sql('your_table', conn, if_exists='replace', index=False)
conn.close()

explode()会自动把每个列表元素拆成独立行,完全匹配你要的格式。如果有多个列表字段需要展开,直接传字段列表就行:df.explode(['attr', 'other_list_col'])。

方法二:调整JSON生成格式(提前扁平化)

如果能控制JSON的生成过程,直接生成扁平化的结构,省掉后续处理步骤:
把原JSON结构从

[{"name": "foo", "attr": ["bar", "baz"]}]

改成

[{"name": "foo", "attr": "bar"}, {"name": "foo", "attr": "baz"}]

这样读取成DataFrame后可以直接调用to_sql()写入,不需要额外处理。要是从其他数据源生成JSON,在生成阶段就做拆分,能减少后续的工作量。


内容的提问来源于stack exchange,提问作者gglazer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:50:30