Python 从列标题中删除整数列表键

Python 从列标题中删除整数列表键,python,pandas,json-normalize,Python,Pandas,Json Normalize,我有一个Python脚本,它使用了来自上一个堆栈溢出的函数 电流输出: _id labelId.0 levels.0.active levels.0.level levels.0.actions.0.isActive 0 1 6422 true 3 true _id labelId levels.a

我有一个Python脚本,它使用了来自上一个堆栈溢出的函数

电流输出:

   _id  labelId.0 levels.0.active  levels.0.level levels.0.actions.0.isActive 
0    1       6422            true               3                        true                           

   _id    labelId   levels.active    levels.level     levels.actions.isActive 
0    1       6422            true               3                        true                           

我遇到的问题是列名称中包含的数字键。是否有一种方法可以修改我的代码以实现我想要的输出

所需输出:

   _id  labelId.0 levels.0.active  levels.0.level levels.0.actions.0.isActive 
0    1       6422            true               3                        true                           

   _id    labelId   levels.active    levels.level     levels.actions.isActive 
0    1       6422            true               3                        true                           


首先,使用
parent\u key
作为bool,然后为其指定其他类型值不是最佳做法。它可以工作,但可能会变得混乱。我稍微修改了一段代码,添加了单独的参数来跟踪
parent\u key
状态为bool,以及
p\u key
,它们携带您想要的字符串。这是一个片段

from pandas import json_normalize
from collections.abc import MutableMapping as mm
def flatten(dictionary, p_key=None, parent_key=False, separator='.'):
    items = []
    for key, value in dictionary.items():
        if parent_key:
            new_key = f"{str(p_key)}{separator}{key}"
        else:
            new_key = p_key if p_key else key
        if isinstance(value, mm):
            items.extend(flatten(
                dictionary=value,
                p_key=new_key,
                parent_key=True,
                separator=separator).items())
        elif isinstance(value, list):
            for k, v in enumerate(value):
                items.extend(flatten(
                    dictionary={str(k): v},
                    p_key=new_key,
                    parent_key=False,
                    separator=separator).items())
        else:
            items.append((new_key, value))
    return dict(items)

d = { 
    "_id" : 1, 
    "labelId" : [
        6422
    ], 
    "levels" : [
        {
            "active" : "true", 
            "level" : 3, 
            "actions" : [
                {
                    "isActive" : "true"
                }]
        }]
}

x = flatten(d)

x = json_normalize(x)

print(x)