我在df中有一个名为diff
的列,其中的值类似于json字符串,格式为:
{'info': {'version': {'from': '2.0.0', 'to': '2.3.4'}}, 'paths': {'modified': {'/dummy': {'operations': {'added': ['PUT']}}}}, 'endpoints': {'added': [{'method': 'PUT', 'path': '/dummy'}]}, 'components': {'schemas': {'added': ['ObjectOfObjects', 'inline_object', 'ObjectOfObjects_inner']}, 'requestBodies': {'added': ['inline_object', 'nested_response']}}}
在这里info
,paths
,endpoints
和components
代表第一组嵌套元素。和第一个类别一样,我们还有下一个类别:例如info
具有不同的字段,如:title
、description
等,components
具有如下字段:schemas
等等。
df列看起来如下所示:
我想扁平化json,意思是分割所有参数,所以这意味着我会得到大约5-6个新列(因为这些是所有参数的变化,第一组元素)。我不想像你在图片from
:... to:..
中看到的那样保留这些变化,我只想改变field
,sub-field
和sub-sub-field
所以输出如下所示:
info paths endpoints components
version modified added schemas:added
requestBodies:added
我研究了json_normalize
、flatten
和jsonpath
,但不知何故,这些都不适用于这个用例。它产生了与我想要的完全不同的输出。如果有人能帮助我解决这个问题,那就太好了!我似乎有点卡住了。
1条答案
按热度按时间h9a6wy2h1#
例如,如果您有一个DataFrame
df
,其中diff
列包含嵌套字典,如下所示:[我假设
diff
中的字典没有字符串化;如果是,则应使用json.loads
/ast.literal_eval
/等对其进行解析]您可以使用类似下面的命令将特定的嵌套值
.map
到其他列如果希望新列出现在新DataFrame中,而不是添加到
df
中:或者,如果您只想将
diff
中的所有嵌套字典扁平化: