ValueError:元数据名称名称冲突,在熊猫中需要区分前缀

时间:2018-08-29 19:55:12

标签: python pandas

执行以下命令时出现ValueError错误

df = pd.DataFrame.from_dict(
                  json_normalize(
                                 data,
                                 'protocol_parameters',
                                 [['status','status'], 
                                  'auto_discovered', 
                                  'average_eps',
                                  'creation_date',
                                  'description',
                                  'last_event_time',
                                  'name']
                                ), orient='columns')

代码中使用的数据对象

{
        "protocol_parameters": [
            {
                "name": "identifier",
                "value": "x.x.x.x"
            },
            {
                "name": "incomingPayloadEncoding",
                "value": "UTF-8"
            }
        ],
        "description": "LinuxServer device",
        "average_eps": 0,
        "creation_date": 0,
        "name": "LinuxServer @ x.x.x.x",
        "auto_discovered": true,
        "last_event_time": 1535539535018,
        "status": {
            "status": "SUCCESS"
        }
    },

错误消息(我想是因为名称字段位于'protocol_parameters'中,并且也是一个单独的对象。但是我无法解决此问题

Traceback (most recent call last):
  File "D:\Qradar\python\LogSources.py", line 31, in <module>
    df = pd.DataFrame.from_dict(json_normalize(data,'protocol_parameters',[['status','status'],'auto_discovered','average_eps','creation_date','description','last_event_time','name']), orient='columns')
  File "D:\VM\python\lib\site-packages\pandas\io\json\normalize.py", line 262, in json_normalize
    'need distinguishing prefix ' % k)
ValueError: Conflicting metadata name name, need distinguishing prefix 

1 个答案:

答案 0 :(得分:2)

关闭,您需要做的就是添加record_prefix来处理两次被使用的名称。将前缀设置为所需的任何字符串:

json_normalize(data,
               'protocol_parameters',
               [['status','status'], 
               'auto_discovered', 
               'average_eps',
               'creation_date',
               'description',
               'last_event_time',
               'name'], record_prefix='_'
                )

退出:

_name   _value  status.status   auto_discovered average_eps creation_date   description last_event_time name
0   identifier  x.x.x.x SUCCESS True    0   0   LinuxServer device  1535539535018   LinuxServer @ x.x.x.x
1   incomingPayloadEncoding UTF-8   SUCCESS True    0   0   LinuxServer device  1535539535018   LinuxServer @ x.x.x.x