如何访问嵌套字典键以生成Pandas DataFram

2024-09-30 14:21:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组dictionary对象,其结构如下所示:

{'android_id': 'ds cgethcvwrzvbjezrzve',
 'app': 'hndbfhjdfhf bnmhjknuihklmmkbghjbtfgjnkluilnkkfbnjtkjzn',
 'app_ver': '10.0.1_0',
 'at': '2016-02-02 23:59:47',
 'birth_date': 1447896843,
 'browser': 'Android 4',
 'carrier': 'Comcast Cable',
 'city_name': 'Jacksonville',
 'country': 'us',
 'custom': {'Action': 'Click',
 'Campaign ID': '167713',
 'Creative ID': '113961',
 'Creative Type': 'Alert',
 'Schema Version - Client': '3',
 'Schema Version - Server': '1'},
 'customer_ids': {'customer_id': '1234587612545464525441540341414'},
 'data_conn': 'android_network_type_3',
 'device_new': False,
}

我的问题是。如何访问嵌套键以在Pandas数据帧中生成列?我从pandas.io.jsonjson\u规范化。 尝试了json_normalize(dictionary),但是性能非常差,因为我有大约200000个条目需要规范化。如有任何帮助,我们将不胜感激。在


Tags: 对象idappdictionaryversionschemadscustomer
2条回答

Pandas有一个实用函数^{},用于执行以下操作:

import pandas as pd

df = pd.io.json.json_normalize({'android_id': 'ds cgethcvwrzvbjezrzve',
 'app': 'hndbfhjdfhf bnmhjknuihklmmkbghjbtfgjnkluilnkkfbnjtkjzn',
 'app_ver': '10.0.1_0',
 'at': '2016-02-02 23:59:47',
 'birth_date': 1447896843,
 'browser': 'Android 4',
 'carrier': 'Comcast Cable',
 'city_name': 'Jacksonville',
 'country': 'us',
 'custom': {'Action': 'Click',
 'Campaign ID': '167713',
 'Creative ID': '113961',
 'Creative Type': 'Alert',
 'Schema Version - Client': '3',
 'Schema Version - Server': '1'},
 'customer_ids': {'customer_id': '1234587612545464525441540341414'},
 'data_conn': 'android_network_type_3',
 'device_new': False,
})

df.columns

输出是

^{pr2}$

请注意函数是如何创建所需的嵌套列的。例如:custom.Actioncustom.Campaign ID。在

您可以取消嵌套数据,然后构造数据帧。下面是如何取消嵌套。在

df = {'android_id': 'ds cgethcvwrzvbjezrzve',
      'app': 'hndbfhjdfhf bnmhjknuihklmmkbghjbtfgjnkluilnkkfbnjtkjzn',
      'app_ver': '10.0.1_0',
      'at': '2016-02-02 23:59:47',
      'birth_date': 1447896843,
      'browser': 'Android 4',
      'carrier': 'Comcast Cable',
      'city_name': 'Jacksonville',
      'country': 'us',
      'custom': {'Action': 'Click',
      'Campaign ID': '167713',
      'Creative ID': '113961',
      'Creative Type': 'Alert',
      'Schema Version - Client': '3',
      'Schema Version - Server': '1'},
      'customer_ids': {'customer_id': '1234587612545464525441540341414'},
      'data_conn': 'android_network_type_3',
      'device_new': False,
        } 

sub_df1 = df.pop('custom')
sub_df2 = df.pop('customer_ids')

df.update(sub_df1)
df.update(sub_df2)


# you can define a function to do this
def un_nest(df):
    sub_df1 = df.pop('custom')
    sub_df2 = df.pop('customer_ids')

    df.update(sub_df1)
    df.update(sub_df2)
    return df

这样可以得到如下输出

^{pr2}$

相关问题 更多 >