如何将Pandas DataFrame中列表格式的人口分布列拆分为多列并保留关联ID
实现方法
你之前explode失效大概率是Demographic_distribution列为JSON字符串格式,而非Python原生列表对象,按以下步骤操作即可:
前置依赖
导入需要的工具库:
import pandas as pd import json
步骤1:校验并转换列格式
先检查列的数据类型:
print(df['Demographic_distribution'].apply(type).unique())
如果输出包含<class 'str'>,说明是JSON字符串,先转成原生列表:
df['Demographic_distribution'] = df['Demographic_distribution'].apply(json.loads)
步骤2:拆分列表为单行字典
用explode方法把每个列表元素拆为独立行,保留对应ID:
df_exploded = df.explode('Demographic_distribution', ignore_index=True)
步骤3:拆分字典字段为独立列
两种方法均可实现:
- 方法1:用
json_normalize解析字典(性能更优)
df_final = pd.concat([ df_exploded['ID'], pd.json_normalize(df_exploded['Demographic_distribution']) ], axis=1)
- 方法2:用Series转换字典
df_final = df_exploded.join( df_exploded['Demographic_distribution'].apply(pd.Series) ).drop('Demographic_distribution', axis=1)
输出效果
最终得到的df_final会包含4列:ID、percentage、age、gender,每行对应原列表中的一个人口统计条目,ID和原数据的对应关系完全保留。
内容的提问来源于stack exchange,提问作者noradioactive
相关产品推荐
相关产品推荐

