如何用Python将嵌套的LinkedIn粉丝统计JSON转换为指定格式CSV
实现方案
我们可以先分别展开每个维度的嵌套列表为独立DataFrame,再按索引对齐合并,自动补全空值为NaN,最终导出CSV即可,完整实现代码如下:
import pandas as pd import json # 第一步:读取加载JSON数据(这里假设你的原始JSON存在data变量里) # 若从文件读取则用:with open('your_file.json', 'r', encoding='utf8') as f: data = json.load(f) element = data['elements'][0] # 第二步:定义各维度的配置映射:原始键名 -> 输出列名映射 dim_config = { 'followerCountsByAssociationType': { 'dim_col': '关联类型', 'organic_col': '关联类型维度自然粉丝数', 'paid_col': '关联类型维度付费粉丝数' }, 'followerCountsByRegion': { 'dim_col': '地域', 'organic_col': '地域维度自然粉丝数', 'paid_col': '地域维度付费粉丝数' }, 'followerCountsBySeniority': { 'dim_col': '职级', 'organic_col': '职级维度自然粉丝数', 'paid_col': '职级维度付费粉丝数' }, 'followerCountsByIndustry': { 'dim_col': '行业', 'organic_col': '行业维度自然粉丝数', 'paid_col': '行业维度付费粉丝数' }, 'followerCountsByFunction': { 'dim_col': '职能', 'organic_col': '职能维度自然粉丝数', 'paid_col': '职能维度付费粉丝数' }, 'followerCountsByStaffCountRange': { 'dim_col': '公司规模', 'organic_col': '公司规模维度自然粉丝数', 'paid_col': '公司规模维度付费粉丝数' }, 'followerCountsByCountry': { 'dim_col': '国家', 'organic_col': '国家维度自然粉丝数', 'paid_col': '国家维度付费粉丝数' } } # 第三步:逐个处理每个维度生成DataFrame df_list = [] max_len = 0 for dim_key, col_map in dim_config.items(): # 展开当前维度的嵌套列表 dim_df = pd.json_normalize(element[dim_key]) # 重命名列 dim_df = dim_df.rename(columns={ dim_key.split('By')[-1].lower(): col_map['dim_col'], 'followerCounts.organicFollowerCount': col_map['organic_col'], 'followerCounts.paidFollowerCount': col_map['paid_col'] }) # 只保留需要的列 dim_df = dim_df[[col_map['dim_col'], col_map['organic_col'], col_map['paid_col']]] df_list.append(dim_df) # 更新最大长度 if len(dim_df) > max_len: max_len = len(dim_df) # 第四步:所有DataFrame对齐到最大长度,补全空值 processed_dfs = [] for df in df_list: processed_dfs.append(df.reindex(range(max_len))) # 第五步:按列合并所有维度 final_df = pd.concat(processed_dfs, axis=1) # 导出为CSV,空值显示为null final_df.to_csv('linkedin_fans_stats.csv', index=False, na_rep='null')
关键说明
- 用
json_normalize自动展开followerCounts嵌套结构,无需手动解析 - 所有维度DataFrame通过
reindex对齐到最长列表的长度,不足位置自动填充NaN - 导出时用
na_rep='null'参数,将空值统一输出为null,完全符合需求
内容的提问来源于stack exchange,提问作者Krouse
相关产品推荐
相关产品推荐

