如何将含字典格式字符串的Zoom API导出TXT转为结构化DataFrame
处理Zoom API导出TXT中registrants字符串列的结构化方案
一、修正数据读取逻辑
原代码用sep=" "会拆分registrants字段内的空格,导致数据错位。改用正则匹配引号前的空格作为分隔符,确保第四个字段完整保留:
import pandas as pd # 读取文件,精准分隔字段 df = pd.read_csv( "registrados111.txt", sep=r'\s+(?=")', # 匹配引号前的空格作为分隔符 engine='python', header=None, names=["page_size", "total_records", "next_page_token", "registrants"] ) # 移除registrants字段首尾的双引号 df['registrants'] = df['registrants'].str.strip('"')
二、将字符串转换为字典对象
registrants列是单引号格式的字典字符串,无法用json.loads直接解析,用ast.literal_eval可安全转换为字典:
import ast # 解析字符串为字典,兼容异常情况 def parse_registrant(s): try: return ast.literal_eval(s) except Exception: return None df['registrants_dict'] = df['registrants'].apply(parse_registrant) # 过滤解析失败的无效记录(可选) df = df.dropna(subset=['registrants_dict'])
三、展开字典列为结构化DataFrame
用pd.json_normalize将字典列拆分为多列,再与原表其他字段合并:
# 展开字典列到多字段 registrants_expanded = pd.json_normalize(df['registrants_dict']) # 合并原表基础字段与展开后的结构化字段 final_df = pd.concat([df[["page_size", "total_records", "next_page_token"]], registrants_expanded], axis=1) # 查看处理结果 final_df.head()
补充说明
- 若registrants包含嵌套字典(如
custom_fields),json_normalize会自动将嵌套字段展开为parent.child格式的列名 - 6000+条记录的场景下,
ast.literal_eval的处理效率完全够用 - 可根据实际数据调整
parse_registrant的异常逻辑,适配特殊格式的记录
内容的提问来源于stack exchange,提问作者Sara Liman
相关产品推荐
相关产品推荐

