【发布时间】:2015-11-30 23:04:56
【问题描述】:
关于将 JSON 字符串转换为 Python 数据字典以便在 Pandas 中进行分析,我在这里遇到了一个棘手的问题。我已经阅读了很多关于此的其他问题,但似乎没有一个适合我的情况。
以前,我只是使用 CSV(和 Pandas 的 read_csv 函数)来执行我的分析,但现在我已经转向直接从 PostgreSQL 中提取数据。
我使用 SQLAlchemy 连接到我的引擎并运行我的查询没有问题。我的整个脚本的运行方式与我从 CSV 中提取数据时的运行方式相同。也就是说,直到它到达我试图将其中一列(即下面示例文本中的“配置”列)从 JSON 转换为 Python 字典的部分。将其转换为 dict 的最终目标是能够计算“config”列中“options”字段下的响应数。
df = pd.read_sql_query('SELECT questions.id, config from questions ', engine)
df = df['config'].apply(json.loads)
df = pd.DataFrame(df.tolist())
df['num_options'] = np.array([len(row) for row in df.options])
当我运行它时,我收到错误“TypeError:预期的字符串或缓冲区”。我尝试将“配置”列中的数据从对象转换为字符串,但这并没有成功(我收到另一个错误,例如“ValueError:期望属性名称......”)。
如果有帮助,这里是来自“配置”列中一个单元格的数据片段(代码应该为这个片段返回结果“6”,因为有 6 个选项):
{"graph_by":"series","options":["Strongbow Case Card/Price Card","Strongbow Case Stacker","Strongbow Pole Topper","Strongbow Base wrap","Other Strongbow POS","None"]}
我的猜测是,当 SQLAlchemy 从数据库中提取 JSON 字符串时,它对 JSON 字符串做了一些奇怪的事情?当我只是从数据库中提取 CSV 时不会发生什么事情?
【问题讨论】:
标签: python json postgresql dictionary sqlalchemy