python - 将 pandas DataFrame 转换为具有最内层对象层的深度嵌套 JSON
问题描述
假设我有一个df
像这样的 DataFrame:
source tables columns data_type length
src1 table1 col1 INT 4
src1 table1 col2 CHAR 2
src1 table2 col1 CHAR 2
src2 table1 col1 INT 4
src2 table1 col2 DATE 3
注意:DataFrame 还有另外 4 列与问题无关
需要一个类似于以下内容的输出:
{
"src1": {
"table1": {
"col1": {
"type": "INT"
"length": 4
},
"col2": {
"type": "CHAR"
"length": 2
}
},
"table2": {
"col1": {
"type": "CHAR"
"length": 2
}
}
},
"src2": {
"table1": {
"col1": {
"type": "INT"
"length": 4
},
"col2": {
"type": "DATE"
"length": 3
}
}
}
}
我目前拥有的代码产生与上面相同的输出,但不包括实际数据类型值(即"type": "CHAR"
,我得到的是 ,而不是"type": ""
),因为我不确定如何相应地嵌套这些值。这是代码:
def make_nested(df):
f = lambda: defaultdict(f)
data = f()
for row in df.to_numpy().tolist():
t = data
for r in row[:-6]:
t = t[r]
t[row[-6]] = {
"type": '',
"length": ''
}
return data
我的问题是如何在不牺牲确切格式的情况下将data_type
和length
列值正确附加到每个JSON 对象中?columns
谢谢。
解决方案
def make_nested(df):
f = lambda: defaultdict(f)
data = f()
for row in df.to_numpy().tolist():
t = data
for r in row[:-3]:
t = t[r]
t[row[-3]] = {
"type": row[-2],
"length": row[-1]
}
return data
最后两列值进入第三级,这就是你应该做的。
推荐阅读
- c# - 即使 IsBodyHtml 属性为 true,电子邮件也不会显示为 HTML
- javascript - 如何生成随机长度的字符串
- r - 如何根据一个值重新排序具有多个变量的图形?
- javascript - 如何创建自定义内置函数的实例?
- c# - 如何在不提取 zip 文件的情况下从内部档案中读取数据?
- api - 如何获得排序/嵌套的 FHIR 捆绑响应?
- docker - 获取“ 60000 毫秒后元数据中不存在主题。”
- python - python3 sqlite和正则表达式查询
- python - 导入请求 ModuleNotFoundError:没有名为“请求”的模块
- c - 使用 RTEMS 信号量同步时,信号处理程序更新的变量是否已优化?